Unity (动画效果 和操控人物移动)
前沿
可以在store上选中自己的模型喜欢然后倒入到你的库中
然后场景中需要设置路线什么的 要用到导航
因为天花板是头顶,不是静态的,所以把statc 给取消勾选
然后windows->>>Ai ------> Navigation 点击 level 模型
然后
点击Bake 然后就是烘培了导航
导入资源包
人物移动跟随摄像机
新建PlayerContronller 控制器脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 玩家控制的脚本 /// </summary> public class PlayMovement : MonoBehaviour { //世界坐标下的目标方向向量 private Vector3 m_Movement; //旋转的四元数 private Quaternion m_Rotation=Quaternion.identity; //游戏的对象的动画组件、刚体组件 private Animator anim; private Rigidbody rd; //游戏对象的每一秒的旋转速度 private float m_Speed = 20f; //音频组件--控制脚步声的音频 AudioSource audioSource; // Start is called before the first frame update void Start() { rd=GetComponent<Rigidbody>(); anim=GetComponent<Animator>(); audioSource=rd.GetComponent<AudioSource>(); } // Update is called once per frame void FixedUpdate() { //辅助记录目标坐标的水平分量与垂直分量。 float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); //根据键盘的键值输入决定是否进行行走动画的播放 bool IsHori = !Mathf.Approximately(horizontal, 0f); bool IsVori = !Mathf.Approximately(vertical, 0f); bool iswalking = IsHori || IsVori; anim.SetBool("IsWalking", iswalking); //控制脚步声声音的变化 if (iswalking) { //人物正在移动,播放脚步声音 if (!audioSource.isPlaying) { audioSource.Play(); } } else { //没有移动,关闭脚步声的播放 audioSource.Stop(); } //将键盘获取到的键值输入赋值给目标坐标 m_Movement.Set(horizontal,0f,vertical); //归一(单位)化,得到世界坐标下的目标方向向量 m_Movement.Normalize(); //获取每帧应到达的世界坐标下的前向方向向量 //用于计算旋转后角度的四元数 Vector3 desiredForward = Vector3.RotateTowards(transform.forward,m_Movement,m_Speed*Time.deltaTime,0f); //每帧旋转后的四元数(Transform组件视角下的角度) m_Rotation=Quaternion.LookRotation(desiredForward); } //该方法在计算机、动画计算求值后,每一帧都会调用。 //解决根动画移动的问题,进行物理适时调用。 private void OnAnimatorMove() { //运用刚体组件控制物体的移动与旋转,下列两个方法传入的参数均为目标值 rd.MovePosition(transform.position + m_Movement * anim.deltaPosition.magnitude); rd.MoveRotation(m_Rotation); } }
这段代码就是控制人物移动的数据,然后控制人物移动的动画
//辅助记录目标坐标的水平分量与垂直分量。 float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); //根据键盘的键值输入决定是否进行行走动画的播放 bool IsHori = !Mathf.Approximately(horizontal, 0f); bool IsVori = !Mathf.Approximately(vertical, 0f); bool iswalking = IsHori || IsVori; play_animator.SetBool("IsWalking", iswalking);
介绍在密室里面
// Y轴失踪是不会动的 所以 为0F //将键盘获取到的键值输入赋值给目标坐标 m_Movement.Set(horizontal, 0f, vertical);
//归一(单位)化,得到世界坐标下的目标方向向量
m_Movement.Normalize();
//获取每帧应到达的世界坐标下的前向方向向量 //用于计算旋转后角度的四元数 Vector3 desiredForward = Vector3.RotateTowards(transform.forward, m_Movement, m_Speed * Time.deltaTime, 0f); //每帧旋转后的四元数(Transform组件视角下的角度) m_Rotation = Quaternion.LookRotation(desiredForward);
上面的代码就是世界坐标轴的方向
/// <summary> ///该方法在计算机、动画计算求值后,每一帧都会调用。 ///解决根动画移动的问题,进行物理适时调用。 /// </summary> private void OnAnimatorMove() { //运用刚体组件控制物体的移动与旋转,下列两个方法传入的参数均为目标值 play_rigidbody.MovePosition(transform.position + m_Movement * anim.deltaPosition.magnitude); play_rigidbody.MoveRotation(m_Rotation); }
设置动画
操作步骤
动画化人物角色: 1.Models->Characters->JohnLemon拖入 2.GameObject->Align with view(调整视角) 3.创建预制体->open预制体->auto save取消勾选 4.给JohnLemon添加动画,创建文件夹MyAnimators->Animator Controller->双击进入 5.拖动John_Idle和John_Walk进入,左侧加入bool值isWalking,设置idle和walk的双向箭头 6.选中从idle到walk的箭头(双向都要操作),Has Exit Time取消勾选,然后设置Conditions,walk->idle选false,反向选true 7.动画状态给到游戏角色,John_Anim直接拖到人物的Controller上
新建Animaltor 如图
设置新的bool
设置 他的走和战力的情况
然后在再运行游戏就可以看到了
ok 完美