在 Unity 3D 中遇到无法控制摄像头的问题,请教一下谢谢啦

295 天前
 vueli

主要的功能就是楼层拆解,打开楼层后,镜头拉进

这个是摄像机的脚本,不知道会不会锁住摄像机导致我无法控制

using UnityEngine;

public class CameraTargetMove : MonoBehaviour
{
    public Transform target;
    public Vector3 pivotOffset = Vector3.zero;
    public float distance = 117.0f;
    public float minDistance = 2f;
    public float maxDistance = 150f;
    public float zoomSpeed = 1f;
    public float xSpeed = 250.0f;
    public float ySpeed = 250.0f;
    public bool allowYTilt = true;
    public float yMinLimit = -90f;
    public float yMaxLimit = 90f;
    private float x = 0.0f;
    private float y = 0.0f;
    private float targetX = 0f;
    private float targetY = 0f;
    public float targetDistance = 117f;

    public bool userControlEnabled = false;  // 用户控制开关
    private bool isFirstFrame = true;
    private void Start()
    {
        var angles = transform.eulerAngles;
        targetX = x = angles.x;
        targetY = y = ClampAngle(angles.y, yMinLimit, yMaxLimit);
        targetDistance = distance;
        userControlEnabled = true;
    }

    private void LateUpdate()
    {
        if (!target) return;

        if (userControlEnabled) {
            var scroll = Input.GetAxis("Mouse ScrollWheel");
            if (scroll > 0.0f) targetDistance -= zoomSpeed;
            else if (scroll < 0.0f)
                targetDistance += zoomSpeed;
            targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance);
           // if (Input.GetMouseButton(1) || (Input.GetMouseButton(0) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))))
            if (Input.GetMouseButton(0))
                {
                targetX += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
                if (allowYTilt)
                {
                    targetY -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
                    targetY = ClampAngle(targetY, yMinLimit, yMaxLimit);
                }
            }

            x = targetX;
            y = targetY;
            Quaternion rotation = Quaternion.Euler(y, x, 0);
            distance = targetDistance;
            Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position + pivotOffset;
            transform.rotation = rotation;
            transform.position = position;

        }
       
    }


    private static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360) angle += 360;
        if (angle > 360) angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }
}

在其他脚本处使用

Camera.main.transform.LookAt(new Vector3(0.1f, 97f, -8.7f));

286 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/958197

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX