unity3d 为什么角色在添加角色控制器后会升到空中?

hrysbysz  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(523)

当 我 给 我 的 角色 添加 一 个 Character Controller 组件 时 , 我 的 角色 在 空中 上升 了 0 . 08 个 单位 。 这 只 发生 在 我 开始 移动 的 时候 。 对撞 机 似乎 在 正确 的 位置 。
以下 是 具有 Character Controller 组件 的 角色 的 屏幕 截图 :

我 的 角色 设置 屏幕 截图 :

我 的 移动 代码 :

[SerializeField] private Transform _orientation;

private CharacterController _controller;

private float xInput;
private float yInput;

private Vector3 _moveDirection;

private float rotationSpeed = 10f;
private float speed = 5f;

private void Awake()
{
    _controller = GetComponent<CharacterController>();
}

private void Start()
{
    Cursor.lockState = CursorLockMode.Locked;
}

private void Update()
{
    xInput = Input.GetAxis("Horizontal");
    yInput = Input.GetAxis("Vertical");

    _moveDirection = _orientation.forward * yInput + _orientation.right * xInput;

    RotatePlayerToCameraView();
    Move(_moveDirection);
}

private void RotatePlayerToCameraView()
{
    Vector3 viewDirection = transform.position - new Vector3(_orientation.position.x, transform.position.y, _orientation.position.z);
    _orientation.forward = viewDirection.normalized; // понять зачем это и как вообще

    gameObject.transform.forward = Vector3.Slerp(gameObject.transform.forward, viewDirection.normalized, Time.deltaTime * rotationSpeed);
}

private void Move(Vector3 moveDirection)
{
    float scaledMoveSpeed = speed * Time.deltaTime;

    moveDirection = new Vector3(moveDirection.x, 0, moveDirection.z);

    _controller.Move(moveDirection * scaledMoveSpeed);
}

中 的 每 一 个

brccelvz

brccelvz1#

角色控制器的skin width: 0.08和 * 我的角色被0.08 units升到空中 * 的问题之间似乎有关联。
查看CharacterController.skinWidth Unity文档:
指定角色周围的蒙皮,物理引擎将在其中生成接触。
物理引擎似乎正在使用整个接触的宽度。

相关问题