4

私は団結の非常に初心者です。エディターで既存の GameObject を複製せずに、スクリプトで gameObject をインスタンス化したい。以下のコードの unity3d.com でチュートリアルを見たとき、剛体がインスタンス化される理由が気になりました。

私が知っているように、剛体は概念的にはゲームオブジェクトのコンポーネントであり、ゲームオブジェクトの子コンポーネントです。Rigidbody はインスタンス化されているだけですが、再生中はゲーム オブジェクトのインスタンスがシーンに表示されます。

前もって感謝します。

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);
        }
    }
}
4

1 に答える 1

5

Instantiate() のスクリプトリファレンスページからの引用:

ゲーム オブジェクト、コンポーネント、またはスクリプト インスタンスが渡されると、Insantiate はゲーム オブジェクト階層全体を複製し、すべての子も同様に複製します。

GameObject を渡すと、その GameObject が複製され、コピーが返されます。

Rigidbody などのコンポーネントを渡すと、コンポーネントのゲームオブジェクトが複製され、コピーの一致するコンポーネントが返されます。

いずれにしても、GameObject 全体を複製します。それはあなたが望む戻り値の問題です。特に、一方から他方に簡単に移動できることを考えると、違いはかなり小さいです。

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

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

あなたが引用している方法には、ロケットに確実にリジッドボディが取り付けられていることを確認できるという利点があると思います。

于 2013-10-21T23:06:23.370 に答える