相机碰撞统一

Camera collision in unity

我不知道如何检查碰撞,这是我的相机移动脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cameracontroller : MonoBehaviour
{   


public float movementSpeed;
public float movementTime;

public Vector3 newPosition;
// Start is called before the first frame update
void Start()
{
    newPosition = transform.position;
}

// Update is called once per frame
void Update()
{
    HandleMovementInput();
}


void HandleMovementInput()
{
    
    if(Input.GetKey(KeyCode.W))
    {
        newPosition += (transform.forward * movementSpeed);
    }
    
    if(Input.GetKey(KeyCode.S))
    {
        newPosition += (transform.forward * -movementSpeed);
    }
    
    if(Input.GetKey(KeyCode.D))
    {
        newPosition += (transform.right * movementSpeed);
    }
    
    if(Input.GetKey(KeyCode.A))
    {
        newPosition += (transform.right * -movementSpeed);
    }
    
    transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime * movementTime);
    }

}

我试过使用 void OnCollisionEnter(Collision collision) 但似乎没有用,我做错了什么吗?所有对象都有 colliders 我也尝试过使用刚体。我还是一个初级程序员,业余时间只写代码,以解释我的知识不足。

OnCollisionEnter 有点棘手,我相信当它与动态刚体(即非运动学)交互时,您会得到最好的结果。如果你想让它检查与墙壁的碰撞,在这种情况下,相机和墙壁都没有动态刚体,那么只需使用 OnTriggerEnter。

如果你正在尝试制作一个 RPG 风格的角色控制器并且相机碰撞代码是为了帮助防止相机穿过墙壁,那么我相信你可以通过光线投射来完成这项工作(通过从相机拍摄光线投射到播放器)而不是使用 OnTrigger。