2013-10-21 72 views
3

我很团结的初学者。我想在脚本中实例化gameObject而不用通过编辑器克隆已存在的GameObject。当我在unity3d.com上看到下面哪些代码的教程时,我很好奇为什么刚体被实例化。为什么在统一中实例化刚体而不是gameObject?

据我所知,刚体在概念上是GameObject的一个组件,也是GameObject的子组件。尽管刚体仅被实例化,但是在玩场景期间在场景中显示游戏对象的实例。

谢谢,提前。

using UnityEngine; 
using System.Collections; 

public class UsingInstantiate : MonoBehaviour 
{ 
    public Rigidbody rocketPrefab; 
    public Transform barrelEnd; 

    void Update() 
    { 
     if(Input.GetButtonDown("Fire1")) 
     { 
      Rigidbody rocketInstance; 
      rocketInstance = Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation) as Rigidbody; 
      rocketInstance.AddForce(barrelEnd.forward * 5000); 
     } 
    } 
} 
+0

欢迎来到SO。如果下面的答案之一解决了您的问题,您应该接受它(点击相应答案旁边的复选标记)。这有两件事。它可以让每个人都知道你的问题已经得到解决,并且可以帮助你获得帮助。请参阅[此处](http://meta.stackexchange.com/a/5235/187716)以获取完整说明。 – nwellnhof

回答

4

scripting reference page for Instantiate()报价:

如果一个游戏对象,组件或脚本实例传递,实例会克隆整个游戏对象层次,所有的孩子克隆以及。

如果您传递一个GameObject,它将复制该GameObject并返回副本。

如果您传递了一个组件,如Rigidbody,它将复制该组件的GameObject并返回该副本的匹配组件。

无论哪种方式,您都会复制整个GameObject。这只是你想要什么样的回报价值的问题。所不同的是非常小的,特别是考虑到你可以很容易地从一个到另一个:

GameObject g1 = ...; //some GameObject 
Rigidbody r1 = g1.rigidbody; 

Rigidbody r2 = ...; //some Rigidbody 
GameObject g2 = r2.gameObject; 

我想你是引用该方法确保肯定是有连接到火箭刚体的优势。

+0

非常感谢你! – cordis3

相关问题