实例化远离源的Spawns对象?

时间:2016-07-19 23:35:09

标签: c# unity3d instantiation

所以我正在尝试做的是将一个较小的立方体预制件放到一个大立方体的完全相同的位置和旋转上,这样它就会“分开”。当我击中太空时,大立方体会按预期消失,但较小的立方体会从远处实例化。

Here's a .gif of what is happening.

 void Update () {
         if (Input.GetKeyDown("space"))
         {
             Instantiate(explo, gameObject.transform.position, Quaternion.identity);
             Destroy(gameObject);
         }
         Debug.Log("The Rotation");
         Debug.Log(explo.transform.rotation);
         Debug.Log("The Position");
         Debug.Log(explo.transform.position);
     }

调试日志:

 The Rotation
 (0.0, 0.0, 0.0, 1.0)
 The Position
 (-5.5, -2.4, 3.5)

这是一个非常简单的脚本,我花了两天的时间试图找到类似的问题,但它们都包括Quaternion,这与我的问题不太相似。

编辑:将gameObject.transform.rotation更改为Quaternion.identity似乎完全重置了对象的旋转。

EDIT2:'explo'在'void start'之前定义为'public GameObject explo',并通过Unity Editor分配。

1 个答案:

答案 0 :(得分:1)

检查“爆炸”预制件中儿童立方体的位置。从您发布的屏幕截图和日志中看,预制件位于(-5.5, -2.4, 3.5),预制件中较小的立方体位于该预制件附近。当您单独查看预制件时,它看起来很好,因为所有较小的立方体都位于预制件的中心周围。但是,当您在场景中实例化预制件时,较小的立方体将保留其预制位置。因此,如果您在运行游戏时将预制件放置在(0, 0, 0),则子框架仍将位于(-5.5, -2.4, 3.5)附近。将预制件中的所有小立方体相对于(0, 0, 0)定位将使它们显示在您在场景中的任何位置实例化预制件时所期望的位置。

另一件事:线Debug.Log(explo.transform.position);实际上显示了您在Unity编辑器中分配给预制件的位置,而不是在场景中实例化的预制对象的位置。要显示场景中对象的位置,请存储对实例化对象的引用,然后显示该对象的位置。喜欢这个

GameObject gameObject = Instantiate(explo, gameObject.transform.position, gameObject.transform.rotation) as GameObject;
Debug.Log(gameObject.transform.position);