单击以移动一个场景中的代码工作,但不移动其他场景,NullReferenceException错误

本文关键字:移动 工作 错误 NullReferenceException 其他 代码 一个 单击 | 更新日期: 2023-09-27 18:26:05

这是我点击移动代码,这是我的第一个问题,所以我是新手。如果你需要更多的信息,我很乐意给你!

我制作了一款自上而下的地牢游戏(如暗黑破坏神),我完成了所有地牢关卡的创建,并开始为我的玩家设置动画和移动,我从第三个也是最后一个关卡开始工作,效果非常完美,我很高兴,因为这是我第一次制作游戏。我创建了一个角色的预制,并将其移动到其他级别,只有当我点击移动时才出现错误,我试图将它们单独添加进来,但仍然没有成功。

using UnityEngine;
using System.Collections;
public class ClickToMove : MonoBehaviour 
{
public float speed;
public CharacterController controller;
private Vector3 position;
public AnimationClip idle;
public AnimationClip run;

public static Vector3 cursorPosition;
// Use this for initialization
void Start () 
{
    position = transform.position;
}
// Update is called once per frame
void Update () 
{
            if(Input.GetMouseButton(0))
            {
                //Locate where the player clicked on the terrain
                locatePosition();
            }
            //Move the player to the position
            moveToPosition();
        }

void locatePosition()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if(Physics.Raycast(ray, out hit, 1000))
    {
        if(hit.collider.tag!="Player"&&hit.collider.tag!="Enemy")
        {
            position = hit.point;
        }
    }
}
void locateCursor()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if(Physics.Raycast(ray, out hit, 1000))
    {
        cursorPosition = hit.point;
    }
}


void moveToPosition()
{
    //Game Object is moving
    if(Vector3.Distance(transform.position, position)>1)
    {
        Quaternion newRotation = Quaternion.LookRotation(position-    transform.position, Vector3.forward);
        newRotation.x = 0f;
        newRotation.z = 0f;
        transform.rotation = Quaternion.Slerp(transform.rotation,     newRotation, Time.deltaTime * 10);
        controller.SimpleMove(transform.forward * speed);
        GetComponent<Animation>().CrossFade("run");

    }
    //Game Object is not moving
    else
    {
        GetComponent<Animation>().CrossFade("idle");
    }
}
}

单击以移动一个场景中的代码工作,但不移动其他场景,NullReferenceException错误

正如Catwood所说,双击控制台中的错误将转到导致异常的相关代码行。不过,我希望它是GetComponent调用之一,因为您正试图对可能返回null的东西调用CrossFade函数(在找不到Animator组件的情况下)。

顺便说一句,您应该避免像这样使用GetComponent,因为它效率很低。相反,创建一个私有/受保护的变量,并在第一次获取组件时存储引用。