Unity“未分配的参考异常”

时间:2019-08-29 05:00:25

标签: c# unity3d

我是编码和这个论坛的超级新手,如果您在这里遇到任何忌讳,请原谅我。我只是在用第三人称摄影机拍摄照片,只是有点混蛋,但我一直都在

  

UnassignedReferenceException:未分配CameraFollow的变量CameraFollowObj。
  您可能需要在检查器中分配CameraFollow脚本的CameraFollowObj变量。
  CameraFollow.CameraUpdater()(在Assets / Scripts / CameraFollow.cs:68)   CameraFollow.LateUpdate()(位于Assets / Scripts / CameraFollow.cs:62)“

我为相机创建了一个对象,以使其遵循并放置在模型上。然后将对象移到我认为是正确的字段,但问题仍然存在。

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

public class CameraFollow : MonoBehaviour
{
    public float CameraMoveSpeed = 120.0f;
    public GameObject CameraFollowObj;

    Vector3 FollowPOS;

    public float clampAngle = 80.0f;
    public float InputSensitivity = 150.0f;
    public GameObject CameraObj;
    public GameObject PlayerObj;
    public float camDistanecXToPlayer;
    public float camDistanecYToPlayer;
    public float camDistanecZToPlayer;
    public float mouseX;
    public float mouseY;
    public float finalInputX;
    public float finalInputZ;
    public float smoothX;
    public float smoothY;

    private float rotY = 0.0f;
    private float rotX = 0.0f;

    // Start is called before the first frame update
    void Start()
    {
        Vector3 rot = transform.localRotation.eulerAngles;
        rotY = rot.y;
        rotX = rot.x;
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    // Update is called once per frame
    void Update()
    {
        float InputX = Input.GetAxis("RightStickHorizontal");
        float InputZ = Input.GetAxis("RightStickVertical");
        mouseX = Input.GetAxis("Mouse X");
        mouseY = Input.GetAxis("Mouse Y");
        finalInputX = InputX + mouseX;
        finalInputZ = InputZ + mouseY;

        rotY += finalInputX * InputSensitivity * Time.deltaTime;
        rotX += finalInputZ * InputSensitivity * Time.deltaTime;

        rotX = Mathf.Clamp(rotX, -clampAngle, clampAngle);

        Quaternion localRotation = Quaternion.Euler(rotX, rotY, 0.0f);
        transform.rotation = localRotation;
    }

    void LateUpdate() 
    {
        CameraUpdater();
    }

    void CameraUpdater() 
    {
        Transform target = CameraFollowObj.transform;

        float step = CameraMoveSpeed * Time.deltaTime;
        transform.position = Vector3.MoveTowards (transform.position, target.position, step);
    }
}  

2 个答案:

答案 0 :(得分:2)

确保没有将脚本添加到项目中其他可能导致此错误的其他游戏对象中。 您可以在场景搜索栏中搜索脚本,所有带有脚本的gameObjects都会出现。同样在运行时中,如果右键单击脚本,然后在上下文菜单中选择“在场景中查找所有引用”或类似的选项,您将在场景中获得脚本的所有实例。

我认为您应该错误地将脚本拖入另一个gameObject中,其中cameraToFollow gameObject为空,这样您会得到未分配的错误。

希望这会有所帮助。

答案 1 :(得分:0)

您可以尝试做很多事情:

  1. 确保在字段中拖动了正确的对象(我怀疑您的角色对象称为CameraFollow)
  2. 请确保您从“层次结构”而不是“资产”窗口中拖动了一个对象(这意味着您需要拖动当前在场景中并且可以在层次结构中看到的对象)
  3. 如果您尝试了以上所有操作,但均无效,请尝试在脚本的start函数中分配对象。您可以使用GameObject.Find

希望这有助于为您澄清一些事情。现在,如果您真的想创建顶级摄像机系统,则还可以检出this视频。它是一个如何使用Cinemachine组件制作第三人称相机的示例(免费提供Unity软件包管理器)

希望您能在Unity中编程感到幸运,并欢迎社区:)