Unity 3D项目 - 02 - 角色动画应用
一、常用代码
0.枚举
enum ;和C语言类似,属于整形,自动累加。和C语言不一样,不同种类的枚举元素可以重名!!
enum MoveStatus_E
{
BackwardsRight = -3,
BackwardsLeft = -2,
Backwards = -1,
Ldile = 0,
Forwards = 1,
ForwardsLeft = 2,
ForwardsRight = 3,
Left = 4,
Right = 5,
}
MoveStatus_E MoveStatus = MoveStatus_E.Ldile;
enum SpeedStatus_E
{
Wlak = 0,
Run,
Sprint,
Jump,
}
SpeedStatus_E SpeedStatus = SpeedStatus_E.Wlak;
1.根据名字获取对象
player = GameObject.Find("/Casual1").transform;
PlayerAnim = PlayerTrans.GetComponent<Animator>();
2.获取键盘按键状态
if (Input.GetKey(KeyCode.W))
MoveStatus = MoveStatus_E.Forwards;
else if (Input.GetKey(KeyCode.S))
MoveStatus = MoveStatus_E.Backwards;
3.设置动画参数
PlayerAnim.SetInteger("WlakState", (int)MoveStatus);
如果想动画播放完毕就退出,可以建立返回过渡但不设立参数条件,保留退出时间等。
4.空间坐标转换
PlayerRigid.velocity = PlayerTrans.TransformDirection(vector_i);
PlayerRigid.rotation = Quaternion.LookRotation(-vector_i);
5.刚体运动
在大多数情况下,不应该直接修改速度,因为这可能导致行为失真 - 改用 AddForce 请勿在每个物理步骤中设置对象的速度,这将导致不真实的物理模拟。
PlayerRigid.velocity = PlayerTrans.TransformDirection(vector_i);
-
使用 Rigidbody.rotation 更改刚体的旋转会在下一个物理模拟步骤后更新变换。这比使用 Transform.rotation 更新旋转要快,因为 Transform.rotation 将导致所有附加的碰撞体重新计算其相对于刚体的旋转,而 Rigidbody.rotation 会直接将值设置到物理系统。 -
如果需要连续旋转刚体,请改为使用 MoveRotation,MoveRotation 会考虑插值问题。 -
注意:使用世界空间。
if (PlayerRigid.rotation != Quaternion.LookRotation(-vector_i))
PlayerRigid.rotation = Quaternion.LookRotation(-vector_i);
6.AI导航
PlayerAgent.destination = vector_i;
agent.isStopped = true;
7.时间差
escjump_time += Time.deltaTime;
二、常用插件
三、文字版步骤
- 导入场景资源,并打包抠出;
官方商店-免费:Low Poly Farm Pack Lite;
注意:加载新资源时记得设置为通用渲染管线。
- 导入人物模型、动画资源,并加载模型预设;
官方商店-免费:日本動漫風角色 : 惠兒 (免費版 / 高中制服版 / 包含VRM);Basic Motions FREE;
- 安装插件Cinemachine;
官方商店-注册表内;
- 设置光照、灯光、环境等。
- 导入
freeLook 虚拟相机,设置目标、参数等;
注意:为人物设立新的空的对象坐标,设为追踪目标。调整跟随范围,防止距离抖动。
-
拷贝人物动画,避免源文件不可修改或被修改; -
设置多层动画,同层动画的过渡关系; -
设置动画参数,过渡条件;
注意:所有动画都不需要退出时间和过渡时间,会导致响应缓慢。返回上一状态时可以有过渡时间,酌情设置,比如跳跃返回。
- 设置地图的导航参数,添加可运动区域和不可运动区域,烘焙地图;
注意:设置导航时需要选择确切的地图对象,地图对象的空父类不可已。
-
添加人物导航组件、刚体组件、胶囊碰撞体组件(暂无用?)、脚本文件; -
编写键盘输入获取的代码;
包含方向键WSAD、步行小跑键CTRL、疾跑Shift,和空格跳跃键Space。
- 编写切换动画参数的代码;
包含退出跳跃动画的判断;
- 编写刚体运动的代码;
尝试了添加力的方法,但是没有效果,不知为何,暂没找到原因。所以还是使用了旧方法,直接给速度。转向也是。
14.编写导航运动的代码;
可以选择导航时是否有多个方向的动画,因为导航会自动先朝向目标再移动,之前用Q版人物时感觉挺不错的。
四、视频版步骤
BGM:网易云免费下载
《末廣健一郎 - 終ワリノ歌》
《水瀬いのり,久保ユリカ - Endless Journey》
《久保ユリカ,水瀬いのり - 雨だれの歌》
五、总结
- 导航组件用在人形上感觉不太好,不知道哪里设置错了;
- 刚体选择经常卡死不能旋转,不知道是不是物理碰撞体卡主了,需要在编辑器里手动旋转一下才能继续旋转;
- 根据API手册的说明,不建议使用直接修改速度和角度;我也认为不太真实,但是使用添加力和力矩的方式不知为何无效果;
- 从主菜单切换进入第二个场景时,不知为何灯光直接暗了许多;如果直接从第二个场景启动则不会;
之前写的一篇关于镜头跟随和键盘移动的笔记:《Unity 知识点 - 3D游戏 - 视角跟随和键盘移动_Lovely_him的博客-CSDN博客》
|