我是团结的初学者。我想在脚本中实例化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);
}
}
}
答案 0 :(得分:5)
引用scripting reference page for Instantiate():
如果传递游戏对象,组件或脚本实例,Instantiate将克隆整个游戏对象层次结构,同时克隆所有子对象。
如果您传递GameObject,它将复制该GameObject并返回副本。
如果传递一个Component,例如Rigidbody,它将复制组件的GameObject并返回该副本的匹配组件。
无论哪种方式,您都复制整个GameObject。这只是一个你想要的回报值的问题。差异非常小,特别是考虑到你可以很容易地从一个到另一个:
GameObject g1 = ...; //some GameObject
Rigidbody r1 = g1.rigidbody;
Rigidbody r2 = ...; //some Rigidbody
GameObject g2 = r2.gameObject;
我认为你引用的方法的优势在于确保火箭上确实存在一个刚体。