我想在玩家死亡后将多个游戏对象移动到原始位置。那是下面的代码,但是我不知道为什么它不起作用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class respawn : MonoBehaviour
{
public lvlmanager Lvlmanager;
public GameObject[] resetObjekt;
private Vector3[] originalPosition;
private Quaternion[] originalRotation;
private Rigidbody2D[] objektBody;
private void Start()
{
Lvlmanager = FindObjectOfType<lvlmanager>();
for(int i = 0; i < resetObjekt.Length; i++)
{
originalPosition[i] = resetObjekt[i].transform.position;
originalRotation[i] = resetObjekt[i].transform.rotation;
objektBody[i] = resetObjekt[i].GetComponent<Rigidbody2D>();
Debug.Log(originalPosition[i]);
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "player")
{
Debug.Log("player dead");
Lvlmanager.RespawnPlayer();
for (int i = 0; i < resetObjekt.Length; i++)
{
objektBody[i].velocity = Vector3.zero;
objektBody[i].bodyType = RigidbodyType2D.Static;
resetObjekt[i].transform.position = originalPosition[i];
resetObjekt[i].transform.rotation = originalRotation[i];
objektBody[i].bodyType = RigidbodyType2D.Kinematic;
}
}
}
}
当我开始游戏时,它显示以下错误:
NullReferenceException:对象引用未设置为对象respawn.Start()(在Assets / script / respawn.cs:21处)
谁都知道,这是什么问题? 这些对象是下降的平台,所以才使用运动学等。
答案 0 :(得分:0)
originalPosition
,originalRotation
和objektBody
从未分配。
在Start()
中引用它们之前,您应该
originalPosition = new Vector3[resetObjekt.Length];
originalRotation = new Quaternion[resetObjekt.Length];
objektBody = new Rigidbody2D[resetObjekt.Length];