变换.玩家类中的位置为空



我不明白为什么播放器脚本所附对象的转换返回null。

这是控制器代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller : MonoBehaviour
{
Player player = new Player();
void Start()
{
player.SetEndpos(new Vector3(0f, 0f, 0f));
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
int roll = Random.Range(1, 7);
player.SetEndpos(new Vector3(roll, 0f, 0f));
}
player.Run();
}
}

这是播放器代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public Vector3 endPos = new Vector3(0f, 0f, 0f);
public void Run()
{
if (transform.position != null)
{
transform.position += endPos;
if (endPos != new Vector3(0f, 0f, 0f))
{
Debug.Log($"pos was set to: {endPos}");
}
}
}
public Vector3 GetEndpos()
{
return endPos;
}
public void SetEndpos(Vector3 end)
{
endPos = end;
Debug.Log($"endPos = {endPos}");
}
}

null错误在"transform中给出。position += endPos;" Player . run ();"在控制器

确切的错误信息:得到NullReferenceException的球员。运行()(在Assets/Scripts/Player.cs:11)控制器。更新()(at Assets/Scripts/Controller.cs:20)

图片:Manager Object有Controller script

图片:播放器对象有播放器脚本

我敢肯定这是我犯的一些愚蠢的错误,但我在其他任何地方都找不到解决办法。

您需要做的是将Player player = new Player();行替换为
public Player player;或者

[Serializable]
private Player player;

在你的控制器脚本中。
之后,你会在控制器的检查器窗口中看到一个变化。应该有一个空字段,说明"None (Player)"。
把你的PlayerGameObject放在你的层次结构中,并把它拖到空字段中的空字段中。

相关内容

  • 没有找到相关文章

最新更新