玩家死亡后将多个游戏对象移动/重生到原始位置

时间:2018-08-18 13:51:04

标签: c# unity3d

我想在玩家死亡后将多个游戏对象移动到原始位置。那是下面的代码,但是我不知道为什么它不起作用。

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处)

谁都知道,这是什么问题? 这些对象是下降的平台,所以才使用运动学等。

1 个答案:

答案 0 :(得分:0)

originalPositionoriginalRotationobjektBody从未分配。

Start()中引用它们之前,您应该

originalPosition = new Vector3[resetObjekt.Length];
originalRotation = new Quaternion[resetObjekt.Length];
objektBody = new Rigidbody2D[resetObjekt.Length];