2013-10-21 40 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

相關問題