在 Unity 中,你可以使用 CharacterController 的属性来设置碰撞层,实现仅与特定层发生碰撞的效果。通过设置 collider.layer,可以将角色控制器限制在特定的层中,只有与该层碰撞的物体才会影响角色控制器。

以下是一个示例代码,展示如何使用 CharacterController 过滤碰撞层:

public class PlayerController : MonoBehaviour
{
    private CharacterController controller;
    public LayerMask collisionMask;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // 移动角色控制器
        controller.Move(Vector3.forward * Time.deltaTime);

        // 检查与 collisionMask 中指定层的碰撞
        int layerMask = 1 << collisionMask.value;
        RaycastHit hit;
        if (Physics.Raycast(transform.position, Vector3.down, out hit, controller.height / 2 + controller.skinWidth, layerMask))
        {
            // 当角色控制器与指定层碰撞时执行的操作
        }
    }
}

在上面的示例代码中,collisionMask 是一个 LayerMask 类型的公共变量,可以在 Inspector 面板中设置。在 Update() 函数中,使用 Physics.Raycast() 函数检测角色控制器与指定层之间的碰撞。layerMask 参数用于将层掩码应用于射线检测,过滤与指定层之外的物体的碰撞。

通过这种方式,你可以有效地控制角色控制器与哪些物体发生碰撞,实现更精准的碰撞检测和游戏逻辑控制。

Unity CharacterController 碰撞层过滤教程:实现精准碰撞检测

原文地址: https://www.cveoy.top/t/topic/nvth 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录