【问题标题】:Why instantiate rigid body instead of gameObject in unity?为什么要实例化刚体而不是统一的游戏对象?
【发布时间】:2013-10-21 22:42:46
【问题描述】:

我是统一的初学者。我想在脚本中实例化游戏对象,而无需通过编辑器克隆已经存在的游戏对象。当我在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);
        }
    }
}

【问题讨论】:

  • 欢迎来到 SO。如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到解决,并为帮助您的人提供帮助。有关完整说明,请参阅here

标签: unity3d


【解决方案1】:

引用scripting reference page for Instantiate():

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

如果您传递一个游戏对象,它将复制该游戏对象并返回副本。

如果你传递一个组件,例如一个刚体,它将复制组件的游戏对象并返回副本的匹配组件。

无论哪种方式,您都复制了整个 GameObject。这只是你想要什么返回值的问题。差异很小,尤其是考虑到您可以轻松地从一个到另一个:

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

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

我想你引用的方法的优点是确保火箭上肯定有一个刚体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多