【问题标题】:Instantiate object at a specific location?在特定位置实例化对象?
【发布时间】:2015-12-27 21:49:49
【问题描述】:

我只是想让一个方形对象被销毁并在它的位置实例化一个新对象。现在发生的事情是第一个对象被销毁,新的对象会出现。但它总是出现在屏幕中间,而不是保存脚本的父变换中。 我尝试设置向量,使用代码设置父对象和其他一些东西,但没有任何效果。在这里,提前致谢!

public Transform RaisingBlock;
public GameObject lava1;
public GameObject raisedBlock1;
public GameObject loweredBlock1;

void Start()
{
    StartCoroutine("MyEvent");
}

private IEnumerator MyEvent()
{
    while(true)
    {
        yield return new WaitForSeconds(2f);
        Destroy(this.gameObject); 
        Instantiate(lava1);
    }
}

【问题讨论】:

  • 你知道你在这里使用什么编程语言吗?请相应地标记。
  • 在我看来像 C#。 this.gameObject 在哪里实例化?我认为正在发生的是 this.gameObject 要么被实例化,要么稍后为其属性赋予某些值。当你摧毁那个物体时,显然它现在已经消失了。但是您使用新值(可能是默认值,甚至是系统默认值)实例化一个新对象。您需要做的是使用先前销毁的对象在销毁时的确切值来实例化新对象。您可以考虑使用任何克隆模式来完成此操作。

标签: c# unity3d transform instantiation destroy


【解决方案1】:

当您销毁游戏对象时,它会从活动屏幕中删除。所以它的位置也会丢失。但是这里的问题是你应该在实例化 lava1 对象时说明位置。考虑使用 Instantiate 的重载之一来完成此操作:

Instantiate(lava1, this.gameObject.transform.position, 
            this.gameObject.transform.rotation);

此外,您的协程会停止,因为您的脚本与游戏对象一起被破坏。

【讨论】:

  • 不,我已经尝试了所有的解决方案,它们都做了完全相同的事情,对象被删除,然后 lava1 被实例化到屏幕中间,无论如何。我试过: Vector3 position = new Vector3(5, 5, 5);游戏对象 newGameObject = 实例化(GameObjectToInstantiate); newGameObject.transform.position = 位置;并实例化(lava1, this.gameObject.transform.position, this.gameObject.transform.rotation);
  • 和 GameObject myRoadInstance = Instantiate(Resources.Load("road"), new Vector3(5, 5, 5), Quaternion.identity) as GameObject;但它们都做同样的事情,物体每次都会重新出现在游戏世界的中间。
  • 你的熔岩游戏对象有动画或其他类似的组件吗?动画如果不是另一个父游戏对象的父级,则可以重置位置也可以在实例化方法调用后移动 Destroy(this.gameObject) 行
猜你喜欢
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多