Felix.Li 发表于 2024-6-27 15:32:36

3D 模型动画分享

随着3D模型现在越来越多的公司使用,相信很多同学也都有所涉及了。

而wyn中也有对应的3D场景,但是只是3D的接入肯定还是不满足的,我们更多希望的。肯定是有一些交互能力,或者动画操作。需要能让我的模型也动起来。
那么基于此呢,我今天分享几个简单的模型动画,来帮助大家,把模型动起来。

当然如果了解wyn的3D模型的,那么应该知道wyn中是可以直接在场景设计器里面些代码的,也就是我们利用代码去控制模型移动。而我们今天也就是分享的已经做好的方法。好了,直接上干货

1.准备一个模型。
今天我们也准备了一个模型给大家使用:


2.模型移动:
今天总共分享三个简单的动画,包括模型移动、模型旋转、模型缩放。我们以模型移动举例。
先贴代码:
move("myCar",{x:0,y:0,z:40.36},30,false,null)

function move(name,position,frame,loop,moveAfter) {

    var box = scene.getMeshByName(name);
    // 创建一个动画
    var animation = new BABYLON.Animation("moveAnimation", "position", 60, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
    // 定义关键帧
    var keys = [];
    keys.push({
      frame: 0,
      value: box.position // 起始位置
    });
    keys.push({
      frame: 30,
      value: new BABYLON.Vector3(position.x, position.y, position.z) // 目标位置
    });
    // 设置关键帧
    animation.setKeys(keys);
    // 应用动画
    box.animations = [];
    box.animations.push(animation);
    // 运行动画
    scene.beginAnimation(box, 0, frame, loop); // 从0帧到100帧,循环播放
    // 如果需要在动画结束后执行某些操作,可以监听动画结束事件
    animation.onAnimationEnd = moveAfter
}这是一个move的function。在这个方法中,我们已经封装好了一套移动的方法,而我们就给大家说一下需要注意的点即可。
首先是方法里面的 animation动画,我们创建了一个 animation 对象。
这个对象里面其他的我们都可以不用管,第三个参数我们传递了一个60.而这个60就代表了我动画每秒60帧。
然后下面有个key的数组,里面也传递了一个 0和30.而这个则是代表了我这个动画从第0帧开始执行,第30帧结束。
那么就等于我这个动画总共执行时间是0.5秒,我们也就是通过这个来控制动画执行时长。
那么这个介绍完,我们就可以直接调用方法了。
方法总共5个入参,分别对应:
name:模型节点名称
position:模型需要到的移动的位置
frame: 动画执行到多少帧
loop:是否重复执行
moveAfter:动画执行结束,回调函数

所有参数,只有模型节点名称和位置可能我们初始不知道,所以我们需要利用wyn的3D场景设计器来获取。首先模型节点名称:

选择到模型节点,然后下面的名称就是模型节点名称,我们也可以根据自己的定义去改变名称。
2.模型移动的位置,我们可以利用右下角的移动按钮来手动移动模型,然后记录对应的位置:


在上述动画中我们自定义改变位置,然后记录位置那里的XYZ即可,传递使用如下传递:
{x:0,y:0,z:40.36}

总体调用就是:

move("myCar",{x:0,y:0,z:40.36},30,false,null)


至此,一个模型移动动画就完成了,是不是很简单下面也分享一下其他的动画:




大家赶紧尝试一下吧
页: [1]
查看完整版本: 3D 模型动画分享