unity3d 团结问题,我的相机在游戏开始时上升

nnsrf1az  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(231)

我已经遵循了youtube教程https://www.youtube.com/watch?v=c1FYp1oOFIs&list=PLD_vBJjpCwJtrHIW1SS5_BNRk6KZJZ7_d&index=4和问题是,当我开始游戏,我的相机移动时,它不应该。

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

namespace BARR3TT
{
    public class CameraHandler : MonoBehaviour
    {
        public Transform targetTransform;
        public Transform cameraTransform;
        public Transform cameraPivotTransform;
        private Transform myTransform;
        private Vector3 cameraTransformPosition;
        private LayerMask ignoreLayers;
        private Vector3 cameraFollowVelocity = Vector3.zero;
        public static CameraHandler singleton;

        public float lookSpeed = 0.1f;
        public float followSpeed = 0.1f;
        public float pivotSpeed = 0.03f;

        private float targetPosition;
        private float defaultPosition;
        private float lookAngle;
        private float pivotAngle;
        public float minimumPivot = -35;
        public float maximumPivot = 35;

        private float cameraSphereRadius = 0.2f;
        public float cameraColisionOffset = 0.2f;
        public float minimumColisionOffset = 0.2f;

        private void Awake()
        {
            singleton = this;
            myTransform = transform;
            defaultPosition = cameraTransform.localPosition.z;
            ignoreLayers = ~(1 << 8 | 1 << 9 << 10);

        }

        public void FollowTarget(float delta)
        {
            Vector3 targetPosition = Vector3.SmoothDamp(myTransform.position, targetTransform.position, ref cameraFollowVelocity, delta / followSpeed);
            myTransform.position = targetPosition;

            HandleCameraCollision(delta);
        }

        public void HandleCameraRotation(float delta, float mouseXInput, float mouseYInput)
        {
            lookAngle += (mouseXInput * lookSpeed) / delta;
            pivotAngle -= (mouseYInput * pivotSpeed) / delta;
            pivotAngle = Mathf.Clamp(pivotAngle, minimumPivot, maximumPivot);

            Vector3 rotation = Vector3.zero;
            rotation.y = lookAngle;
            Quaternion targetRotation = Quaternion.Euler(rotation);
            myTransform.rotation = targetRotation;

            rotation = Vector3.zero;
            rotation.x = pivotAngle;
             
            targetRotation = Quaternion.Euler(rotation);
            cameraPivotTransform.localRotation = targetRotation;

        }
        private void HandleCameraCollision(float delta)
        {
            targetPosition = defaultPosition;
            RaycastHit hit;
            Vector3 direction = cameraTransform.position - cameraPivotTransform.position;
            direction.Normalize();

            if(Physics.SphereCast(cameraPivotTransform.position, cameraSphereRadius, direction, out hit ,Mathf.Abs(targetPosition)))
            {
                float dis = Vector3.Distance(cameraPivotTransform.position, hit.point);
                targetPosition = -(dis - cameraColisionOffset);
            }

            if(Mathf.Abs(targetPosition)<minimumColisionOffset)
            {
                targetPosition = -minimumColisionOffset;
            }
            cameraTransformPosition.z = Mathf.Lerp(cameraTransform.localPosition.z, targetPosition, delta / 0.2f);
            cameraTransform.localPosition = cameraTransformPosition;
        }
    }

    
}

我检查了每一行,我没有看到任何错误的转换是他们应该在的地方,我可以有点修复它添加一些旋转在x轴上的主相机,但它仍然很奇怪

fzsnzjdm

fzsnzjdm1#

你需要检查你的摄像头是否已经连接到任何脚本,或者它是否是一些对象中的一个子对象。我认为这就是错误的来源。x1c 0d1x
如果Camera HolderCamera Pivot改变其方向,则Main Camera也将改变。
//您的代码非常复杂,并且没有任何注解,您的代码需要用空行来分隔它的函数。所以这就是为什么人们看到您的代码时懒得去看、分析和回答您。如果您使用的是Visual Code Studio之类的IDE,只需使用Shilf + Alt + FVisual Studiouse**;**每次结束一行,这样它会自动格式化你的代码。最后但同样重要的是,请添加注解。

  • 这些只是我给你的建议,没有任何冒犯你的想法,只是想帮助你更好地编写代码。*

相关问题