首页 > 其他分享 >CharacterController 角色控制器

CharacterController 角色控制器

时间:2022-10-28 21:13:17浏览次数:43  
标签:动画 CharacterController 角色 cc 控制器 动画片 Input dir

鉴于transform.Translate能够移动且不受前方游戏物体影响,能够直接穿过去,Rigibody移动的时候又会受到外界力的影响(虽然可以通过改变其上面的参数来限制),这个时候就用到了Character ControllerCharacter Controller同时拥有刚体的重力效果同时也不会收到外界力的影响。

  • Slope Limit 最大可以行走的坡度
  • Step Offset 最大能够行走的台阶高度
  • Skin Width 碰撞厚度,更改碰撞检测灵敏度,一般不需要更改
  • Min Move Distance 最小移动距离,一般不需要更改
  • Center 碰撞器的中心点
  • Radius 碰撞器的外观
  • Height 碰撞器的高度
// 移动速度
public float speed;
// 旋转速度
public float rotationSpeed;
// 角色控制器
public CharacterController cc;

private void Update() {
    // 通过获得轴向来获得对应的向量
    Vector3 dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
    // 角色控制器的移动速度
    cc.SimpleMove(dir * speed * Time.deltaTime);
    // 防止键盘没有输出的时候模型突然转向到初始方向
    if (dir.x != 0 || dir.z != 0) {
        // 通过四元素改变游戏物体的转向
        transform.rotation = Quaternion.LookRotation(dir);
        // 通过四元数的线性插值改变游戏物体的转向,当前方向,目标方向,旋转速度
        transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), Time.deltaTime * rotationSpeed);
    }
}

Quaternion.Lerp线性插值
不使用线性插值改变游戏物体转向的时候会导致场景中的游戏物体突然转向,而使用线性插值改变游戏物体转向的时候会有缓动效果。

动画控制器

  1. 创建一个新的动画控制器(右键 → Create → Animator Controller)
  2. 在动画控制器中添加动画片段(将需要的动画片段拖入)
  3. 添加动画间的流转(在动画片段上右键 → Make Transition)
  4. 添加动画流转触发条件(动画控制器左上角的Parameters → 加号)一共有四种触发条件,根据需求进行添加
  5. 将动画流转触发条件和动画流转关联(点击动画流转第三步在动画之间连的线 → 选中详情面板中的Conditions,对其添加第四步添加的触发条件)
    6:代码控制
// 获得游戏物体上的Animator组件
public Animator cc;
// 触发状态跳转条件。
cc.SetBool("IsRun", Input.GetKey(KeyCode.Q));

动画是否循环播放是调整动画片段上的Loop Time,和动画控制器没有太大的关系。
动画是否立刻跳转要调整动画流转右侧的详情面板中has Exit Time,当前动画是否要播放玩(勾上的话要等当前动画播放完毕才能跳转到下一个动画)。

动画融合树

  1. 创建一个动画控制器
  2. 在动画控制器中添加动画片段
  3. 右键选中Create New BlendTree In State,这时会自动创建一个Blend。
  4. 双击进入,更改动画跳转名称,在右侧的详情面板中点击加号选中Add Motion Field,并将要融合的动画片段拖入。

cc.SetFloat("Speed", new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).magnitude);
动画融合可以将待机,移动,跑步,全力跑等多个类型的动画进行融合

2D融合树

  1. 创建一个动画控制器
  2. 在动画控制器中添加动画片段
  3. 将右侧详情面板的Blend Type 更改成2D Freeform Directional,创建两个Float的变量,将右侧面板的Parameters的对应参数进行更改,点击加号添加动画片段和将PosX和PosY对应的数值进行更改。
public Animator cc;
void Update()
{
    Vector3 dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
    cc.SetFloat("X", dir.x);
    cc.SetFloat("Y", dir.y);
}

2D融合,可以在拥有前进,后退,左移,右移,待机五个动画片段的情况下,对其进行融合使其更加的顺滑,且能够实现右前方斜向移动等。

标签:动画,CharacterController,角色,cc,控制器,动画片,Input,dir
From: https://www.cnblogs.com/wuzhongke/p/16837087.html

相关文章

  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验......
  • 实验6:开源控制器实践——RYU
    (一)基本要求1、连接Ryu控制器,通过Ryu的图形界面查看网络拓扑2、h1pingh2的两种抓包情况和流表查看tcpdump验证L2Switch:POX的Hub模块:3、L2Switch和POX的Hub模......
  • 实验6:开源控制器实践——RYU
    一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktopamd6......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验......
  • 实验6:开源控制器实践——RYU
    (一)基本要求1、搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。sudomn--topo=single,3--mac--controller=remote,ip=127.0......
  • 实验6:开源控制器实践
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环......
  • 实验6_开源控制器实践——Ryu
    一)基本要求1.搭建所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。·构建拓扑sudomn--topo=single,3--mac--controller=remote,ip......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环......
  • 实验6:开源控制器实践——RYU
    (一)基本要求1.搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。1)构建topo:sudomn--topo=single,3--mac--controller=remot......