【Unity基础】RigidBody 、CharacterController控制角色移动

RigidBody

首先要给角色添加刚体和碰撞器:

注意刚体下面的Contrains选项里面选择冻结刚体的旋转 不然对人物施加力的时候会摔倒

在这里插入图片描述
代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PlayerRig : MonoBehaviour
{
    Rigidbody rig;
    Animator animator;
    public float speed = 5.0f;
    public AudioClip clipFoot;
    void Start()
    {
        rig = GetComponent<Rigidbody>();
        animator = GetComponent<Animator>();
    }

  
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(h, 0, v);
        Vector3 dirWorld = Camera.main.transform.TransformDirection(dir);
        dirWorld.y = 0;
        dirWorld.Normalize();
        transform.LookAt(dirWorld + transform.position);

        //定义一个速度: 由单位向量*一个固定值
        Vector3 curVel = dirWorld * speed;
        // 由于 dirWorld 向量的y轴方向没有大小, 所以要把物体y轴上的速度加到curVel的y轴上
        curVel.y = rig.velocity.y;
        // 最后把这个向量赋值给刚体速度, 这个curVel的x z 轴速度是由按键输入赋值, y轴大小是物体的重力
        rig.velocity = curVel;
        animator.SetFloat("Speed", dirWorld.magnitude);

    }
    void playFootSound()
    {
        AudioSource.PlayClipAtPoint(clipFoot, transform.position);
    }
}

CharacterController

添加组件 CharacterController
在这里插入图片描述
设置Center属性和Radius 这是碰撞器大小
代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class PlayerCC : MonoBehaviour
{
    Animator animator;
    CharacterController cc;
    float speed = 3.0f;
    Vector3 speedDown;
    public AudioClip clipFoot;
    void Start()
    {
        animator = GetComponent<Animator>();
        cc = GetComponent<CharacterController>();
    }

  
    void Update()
    {
        if (!cc.isGrounded)
        {
            speedDown.y += Physics.gravity.y * Time.deltaTime;
        }
        else
        {
            speedDown.y = 0;
        }
        cc.Move(speedDown * Time.deltaTime);
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(h, 0, v);
        Vector3 dirWorld = Camera.main.transform.TransformDirection(dir);
        dirWorld.y = 0;
        animator.SetFloat("Speed", dirWorld.magnitude);
        transform.LookAt(transform.position + dirWorld);
        cc.Move(dirWorld * speed * Time.deltaTime);
    }

    void playFootSound()
    {
        AudioSource.PlayClipAtPoint(clipFoot, transform.position);
    }
}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 当然可以使用Unity编写一个移动CharacterController。下面是一个基本的示例代码,可在Unity中创建一个名为"Player"的GameObject,然后将以下代码添加到该对象的脚本组件中,即可实现角色移动: ``` using UnityEngine; public class PlayerController : MonoBehaviour { public float moveSpeed = 5.0f; // 移动速度 private CharacterController controller; // CharacterController组件 private Vector3 moveDirection = Vector3.zero; // 移动方向 void Start() { controller = GetComponent<CharacterController>(); // 获取CharacterController组件 } void Update() { float horizontal = Input.GetAxis("Horizontal"); // 获取水平方向上的输入 float vertical = Input.GetAxis("Vertical"); // 获取垂直方向上的输入 // 计算移动方向 moveDirection = new Vector3(horizontal, 0.0f, vertical); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= moveSpeed; // 将移动方向应用到CharacterController组件上 controller.Move(moveDirection * Time.deltaTime); } } ``` 这个示例代码中,我们定义了一个名为“PlayerController”的脚本,该脚本会在每一帧中获取玩家的输入,然后根据输入计算出移动方向,并将移动方向应用到CharacterController组件上。注意,这里我们使用了Time.deltaTime来控制移动速度,这样可以保证在不同的帧率下,角色移动速度保持一致。 ### 回答2: Unity是一款强大的游戏开发引擎,可以用来创建各种不同类型的游戏。编写一个移动character controller可以让玩家在游戏中控制角色移动。 在Unity中,编写一个character controller需要以下几个步骤: 1. 创建一个新的GameObject并将其重命名为"Player",用来表示角色。将该GameObject添加一个Capsule Collider组件,以便其他物体与角色互动碰撞。 2. 添加一个Rigidbody组件,以便在角色移动时受到物理引擎影响。确保将Rigidbody的"Use Gravity"选项禁用,这样角色就不会受到重力影响。 3. 创建一个C#脚本,并将其附加到Player对象上。在脚本中,声明一个变量来控制角色移动速度,例如"moveSpeed"。 4. 在脚本中,使用Input.GetAxis()函数来获取玩家的输入,例如水平和垂直轴的输入。将输入乘以移动速度,得到角色在每个方向上的移动速度。 5. 使用Rigidbody组件的velocity属性来将计算得到的移动速度应用到角色上。通过调用Rigidbody的MovePosition()函数并传递角色的新位置,使角色移动。 6. 为了让角色在空中能跳跃,你可以添加一个额外的检测机制,检测角色是否与地面接触。当玩家按下跳跃键时,在脚本中添加一个适当的力量到角色的Y轴速度上。 7. 如果你还想要角色的旋转,你可以使用Input.GetAxis()函数来获取玩家的转向输入,并将其应用到角色上的Rigidbody组件的rotation属性上。 通过以上步骤,你就可以使用Unity编写一个简单的移动character controller了。当你在游戏场景中运行游戏并玩家点击键盘上的WASD键时,角色就可以在场景中移动了。 ### 回答3: 使用Unity写一个移动Character Controller可以通过以下步骤完成: 1. 创建一个新的Unity项目并导入所需的资源(例如角色模型、动画等)。 2. 创建一个空的Game Object作为角色控制器,并将其添加到场景中。 3. 添加一个Rigidbody组件到角色控制器上,用于处理物理运动。 4. 添加一个Capsule Collider组件到角色控制器上,以便处理碰撞。 5. 创建脚本文件并将其附加到角色控制器上。 6. 在脚本中,定义角色移动速度、旋转速度等变量,并使用Input.GetAxis函数获取玩家输入。 7. 在Update函数中,根据玩家输入控制角色移动和旋转。 8. 使用Rigidbody的AddForce函数将力应用于角色控制器,以使其移动。 9. 在角色控制器的脚本中,可以添加额外的功能,例如跳跃、攻击等。 10. 测试和调试角色控制器,确保角色能够按照预期移动和旋转。 11. 可以根据需要添加更多功能,例如动画、摄像机跟随等。 通过以上步骤,你可以使用Unity编写一个移动Character Controller,并通过脚本控制角色移动和旋转。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值