从源实例化 Spawns 对象?
Instantiate Spawns Object Away from Source?
所以我想做的是在一个大立方体的完全相同的位置和旋转方向上生成一个小立方体的预制件,所以它 'breaks apart'。当我点击 space 时,大立方体按预期消失,但较小的立方体从远处实例化。
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)
这是一个非常简单的脚本,我花了 2 天时间试图找到与我的问题类似的问题,但它们都包含四元数,这与我的问题不相似。
编辑:将 gameObject.transform.rotation 更改为 Quaternion.identity 似乎完全重置了对象的旋转。
EDIT2:'explo' 在 'void start' 之前定义为 'public GameObject explo',并通过 Unity 编辑器分配。
检查 "explosion" 预制件中子立方体的位置。从您发布的屏幕截图和日志来看,您的预制件看起来位于 (-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);
所以我想做的是在一个大立方体的完全相同的位置和旋转方向上生成一个小立方体的预制件,所以它 'breaks apart'。当我点击 space 时,大立方体按预期消失,但较小的立方体从远处实例化。
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)
这是一个非常简单的脚本,我花了 2 天时间试图找到与我的问题类似的问题,但它们都包含四元数,这与我的问题不相似。
编辑:将 gameObject.transform.rotation 更改为 Quaternion.identity 似乎完全重置了对象的旋转。
EDIT2:'explo' 在 'void start' 之前定义为 'public GameObject explo',并通过 Unity 编辑器分配。
检查 "explosion" 预制件中子立方体的位置。从您发布的屏幕截图和日志来看,您的预制件看起来位于 (-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);