单击以移动一个场景中的代码工作,但不移动其他场景,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");
}
}
}
顺便说一句,您应该避免像这样使用GetComponent,因为它效率很低。相反,创建一个私有/受保护的变量,并在第一次获取组件时存储引用。