在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)。
我尝试过但没有奏效的事情:
将框collider/rigidbody/material应用到相机
制作一个空游戏object parent 相机并将盒子 collider/rigidbody/material 应用于该游戏object
使相机裁剪角(近)< 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 的组件。这将帮助您解决此问题。此外,还有许多其他功能可供尝试。
我正在统一创建一个 third-person android 3d 游戏。我已经设置了一个 free look on touch 脚本来在播放器周围移动相机视图。下面是代码。但是跟随我的玩家的摄像机正在穿过墙壁并且 objects 进入玩家和摄像机之间。我希望相机在碰到 object 时自行调整(相机不是我播放器的 child)。 我尝试过但没有奏效的事情:
将框collider/rigidbody/material应用到相机
制作一个空游戏object parent 相机并将盒子 collider/rigidbody/material 应用于该游戏object
使相机裁剪角(近)< 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 的组件。这将帮助您解决此问题。此外,还有许多其他功能可供尝试。