我试图让摄像机跟随我的播放器(通过预制实例化),但我的摄像机脚本中不断出现错误。
我的相机脚本(错误在offset = transform.position - Game.currentPlayer.transform.position;
行中):
public class CameraControl : MonoBehaviour
{
private Vector3 offset;
private void Awake()
{
offset = transform.position - Game.currentPlayer.transform.position;
}
void LateUpdate()
{
transform.position = Game.currentPlayer.transform.position + offset;
}
}
我在这里设置currentPlayer
变量:
void Start()
{
GameObject newPlayer = Instantiate(player,transform.position,transform.rotation);
newPlayer.name = "Player";
currentPlayer = newPlayer;
}
如果您需要其他脚本来帮助,只需询问:)
答案 0 :(得分:1)
Awake
在Start
之前被调用。实际上,甚至所有 Awake
方法都在之前被调用之前完成(另请参见Order of Execution for Event Functions
)。
因此尚未在Start
中设置参考。
您将不得不将其移至Awake
方法或将实例化部分移至Start
。
在两种情况下,仍不能保证Awake
脚本将在Game
之前执行其Start
。因此,您仍然必须调整Script Execution Order,以使GameControl
总是在Game
之前被执行。
GameControl
块之前拖放Game
脚本或者,您可以使用事件系统:
DefaultTime
,然后在public class Game : MonoBehaviour
{
public static event Action OnInitilalized;
public static GameObject currentPlayer;
privtae void Start()
{
GameObject newPlayer = Instantiate(player,transform.position,transform.rotation);
newPlayer.name = "Player";
currentPlayer = newPlayer;
OnInitilalized?.Invoke();
}
}
中向GameControl
事件添加回调,例如
OnInitialized