首页 > 解决方案 > 玩家死亡后将多个游戏对象移动/重生到原始位置

问题描述

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

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)

有谁知道,问题是什么?这些物体是掉落的平台,这就是我使用运动学等的原因。

标签: c#unity3d

解决方案


originalPositionoriginalRotation并且objektBody永远不会分配给。

在引用它们之前,Start()你应该做

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

推荐阅读