为什么在统一中实例化刚体而不是gameObject?

cor*_*is3 4 unity-game-engine

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

据我所知,刚体在概念上是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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

rut*_*ter 5

Instantiate()脚本参考页面引用:

如果传递游戏对象,组件或脚本实例,Instantiate将克隆整个游戏对象层次结构,同时克隆所有子对象.

如果传递GameObject,它将复制该GameObject并返回副本.

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

无论哪种方式,您复制整个GameObject.这只是一个你想要的回报值的问题.区别很小,特别是考虑到你可以轻松地从一个到另一个:

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

Rigidbody r2 = ...; //some Rigidbody
GameObject g2 = r2.gameObject;
Run Code Online (Sandbox Code Playgroud)

我想你引用的方法有一个好处,就是确保火箭上肯定有一个Rigidbody.