在Unity3d中如何让相机不穿墙和objects?

How to make camera not go through the walls and objects in Unity3d?

我正在统一创建一个 third-person android 3d 游戏。我已经设置了一个 free look on touch 脚本来在播放器周围移动相机视图。下面是代码。但是跟随我的玩家的摄像机正在穿过墙壁并且 objects 进入玩家和摄像机之间。我希望相机在碰到 object 时自行调整(相机不是我播放器的 child)。 我尝试过但没有奏效的事情:

  1. 将框collider/rigidbody/material应用到相机

  2. 制作一个空游戏object parent 相机并将盒子 collider/rigidbody/material 应用于该游戏object

  3. 使相机裁剪角(近)< 0.3 这仅适用于第一人称,但不适用于第三人称。

我想光线投射会有所帮助,但我不知道如何实现它。任何建议都会有很大帮助!


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.ThirdPerson;

public class ThirdPersonInput : MonoBehaviour
{ 
    public FixedJoystick LeftJoystick;
    public FixedButton Button;
    public FixedTouchField TouchField;

    protected ThirdPersonUserControl Control;
    protected float CameraAngle;
    protected float CameraAngleSpeed = 0.2f;
    // Start is called before the first frame update
    void Start()
    {
        Control = GetComponent<ThirdPersonUserControl>();
    }
    // Update is called once per frame
    void Update()
    {
        Control.m_Jump = Button.Pressed;
        Control.Hinput = LeftJoystick.Direction.x;
        Control.Vinput = LeftJoystick.Direction.y;

        CameraAngle += TouchField.TouchDist.x * CameraAngleSpeed;

        Camera.main.transform.position = transform.position + Quaternion.AngleAxis(CameraAngle, Vector3.up) * new Vector3(0, 3, -3);
        Camera.main.transform.rotation = Quaternion.LookRotation(transform.position + Vector3.up * 2f - Camera.main.transform.position, Vector3.up);
    }
} 

如果你用cinemachine试试就方便多了。在 cinemachine 内部,有一个名为 Cinemachine collider 的组件。这将帮助您解决此问题。此外,还有许多其他功能可供尝试。