【问题标题】:Unity: Players respawns with disabled controllerUnity:玩家在禁用控制器的情况下重生
【发布时间】:2023-04-11 01:13:01
【问题描述】:

所以我有这段代码可以在我的玩家击中敌人时重生。一切正常,但是当玩家生成时,他无法控制。由于某种原因,Player 克隆在检查器中未选中控制器脚本。

有人知道为什么会发生这种情况以及如何解决吗?

使用 UnityEngine;
使用 System.Collections;

公共类 RedEnemy : MonoBehaviour {

GameObject spawnPoint; GameObject Player; // Use this for initialization void Start () { spawnPoint = GameObject.Find ("spawnPoint"); Player = GameObject.Find ("Player"); } //collider void OnTriggerEnter ( Collider other ){ if (other.tag == "Player") { Destroy (other.gameObject); GameObject Clone; Clone = Instantiate(Player, spawnPoint.transform.position, Quaternion.identity) as GameObject; } }

}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以简单地重置他们的统计数据并移动他们,而不是摧毁玩家。

    或者,您可以在生成新玩家时启用控制器。使用控制器脚本的名称,您可以这样做:

    Clone.GetComponent<Controller>().enabled = true;
    

    您可能还想进一步考虑您的设计。让每个敌人都持有对生成点的引用,而玩家有点傻,如果你要生成大量敌人,那些Find 操作将会很费力。理想情况下,由于您只有一个玩家和很多敌人,您应该在玩家类中拥有控制玩家的代码,而不是敌人。

    【讨论】:

    • 好的。感谢您的回复,我会尝试您的所有提示!
    【解决方案2】:

    我认为实例化不是预制的Gameobject 是个坏主意。您应该只实例化预制件,并且您的代码正在实例化 GameObject 的实例(对不起,冗余)。

    当您的实例被销毁时,当您尝试在其而不是预制件上调用Instantiate 时,这可能会导致意外行为,就像您正在经历的那样。

    您应该为您的播放器制作一个预制件,然后将您的 Player 变量公开并在检查器中将其设置为播放器的预制件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多