c# - 玩家死亡后将多个游戏对象移动/重生到原始位置
问题描述
我想在玩家死后将多个游戏对象移动到原始位置。那是下面的代码,但我不知道,为什么它不起作用。
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)
有谁知道,问题是什么?这些物体是掉落的平台,这就是我使用运动学等的原因。
解决方案
originalPosition
,originalRotation
并且objektBody
永远不会分配给。
在引用它们之前,Start()
你应该做
originalPosition = new Vector3[resetObjekt.Length];
originalRotation = new Quaternion[resetObjekt.Length];
objektBody = new Rigidbody2D[resetObjekt.Length];
推荐阅读
- javascript - MOGRT 中的 Premiere Pro Extendscript 复选框选择
- c# - 如何将元素插入数组C#
- core-data - 如何在共享容器中加载新的 Core Data 文件?
- bash - Grep 返回 'grep: node_list.txt: No such file or directory' 错误
- clojure - 如何在 Clojure 中嵌套 require?
- scala - 如何使用 BehaviorTestKit 来验证是否生成了正确的孩子
- haskell - GHCI - 提示颜色在 Windows 上不起作用
- c - C编程将char数组复制到char的二维数组
- javascript - 为什么删除元素后所需的检查不起作用?
- python - 无法使用 DolphinDB Python API 上传包含混合类型数据的 DataFrame