为什么在Unity中应该实例化刚体(RigidBody)而不是游戏物体(GameObject)?

4

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

据我所知,刚体是游戏对象的组件,概念上是游戏对象的子组件。尽管如此,在播放过程中只有刚体被实例化,游戏对象的实例在场景中显示。

提前致谢。

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

欢迎来到SO。如果下面的任何一个答案解决了您的问题,您应该接受它(单击适当答案旁边的复选标记)。这样做有两个作用。它让每个人都知道您的问题已经解决,并且它为帮助您的人提供了帮助信用。请参见此处获取完整说明。 - nwellnhof
1个回答

6
引用自实例化(Instantiate)脚本参考页面
如果传递了游戏对象、组件或脚本实例,实例化将克隆整个游戏对象层次结构,并克隆所有子对象。
如果传递一个 GameObject,则会复制该 GameObject 并返回副本。
如果传递一个 Component,例如 Rigidbody,则会复制组件的 GameObject 并返回副本的匹配组件。
无论哪种方式,您都会复制整个 GameObject。只是一个返回值的问题。差别很小,特别是考虑到您可以轻松地从一个转换到另一个。
GameObject g1 = ...; //some GameObject
Rigidbody r1 = g1.rigidbody;

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

我想你引用的方法有一个优点,确保火箭上一定连接了刚体组件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接