在这个例子中,一个 Launcher
GameObjectUnity 场景中的基本对象,可以代表角色、道具、场景、摄像机、航点等等。GameObject 的功能由附加到它的组件定义。更多信息
参见 词汇表 在玩家按下开火按钮时实例化一个弹丸 预制体一种资产类型,允许您存储一个包含组件和属性的 GameObject。预制体充当模板,您可以从中在场景中创建新的对象实例。更多信息
参见 词汇表。预制体包含一个 网格Unity 的主要图形基元。网格构成了 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。NURBS、NURMS、细分曲面必须转换为多边形。更多信息
参见 词汇表、一个 刚体一个允许 GameObject 受模拟重力和其它力的影响的组件。更多信息
参见 词汇表 和一个 碰撞体一个用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格完全相同的形状 - 粗略的近似通常更高效且在游戏玩法中难以区分。更多信息
参见 词汇表,因此它可以飞过空中并检测何时发生 碰撞当物理引擎检测到两个 GameObject 的碰撞体接触或重叠时,就会发生碰撞,前提是至少有一个具有刚体组件并且处于运动状态。更多信息
参见 词汇表。
弹丸与某物发生碰撞并实例化一个爆炸预制体。爆炸预制体包含一个 粒子系统一个通过在场景中生成和动画大量小型 2D 图像来模拟流体实体(如液体、云和火焰)的组件。更多信息
参见 词汇表 效果和一个将力应用于周围 GameObject 的脚本。
与 块示例 一样,您可以用一行代码实例化弹丸,无论弹丸预制体有多复杂。实例化预制体后,您还可以修改实例化 GameObject 的任何属性。例如,您可以设置弹丸刚体的速度。
除了更易于使用之外,您还可以修改预制体,而无需触碰代码。因此,如果您的弹丸是火箭,以后您可以添加一个粒子系统来让它留下云迹。完成后,所有实例化的火箭都会有粒子轨迹。
此脚本展示了如何使用 Instantiate
方法发射弹丸。
using UnityEngine;
public class FireProjectile : MonoBehaviour
{
public Rigidbody projectile;
public float speed = 4;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);
p.velocity = transform.forward * speed;
}
}
}
在代码中,预制体变量类型是 Rigidbody 而不是 GameObject。这有两个有用的效果
只有具有刚体组件的 GameObject 可以分配给此变量。这很有用,因为它有助于确保您将正确的 GameObject 分配给变量。
Instantiate
方法返回对新实例上刚体组件的引用。这很有用,因为它可以轻松地在实例化刚体后立即设置其速度。
当创建公共预制体变量时,变量类型可以是 GameObject,也可以是任何有效的组件类型(内置 Unity 组件或您自己的 MonoBehaviour 脚本)。
对于 GameObject 类型变量,您可以将任何 GameObject 分配给该变量,Instantiate
函数将返回对新 GameObject 实例的引用。
对于组件类型变量(如 Rigidbody、Collider 和 Light),您只能将具有该组件类型的 GameObject 分配给该变量,Instantiate
函数将返回对新 GameObject 实例上该特定组件的引用。
以下脚本(放在弹丸预制体上)执行在弹丸当前位置实例化爆炸并删除弹丸 GameObject 的操作,当弹丸与某物发生碰撞时。
using UnityEngine;
public class Projectile : MonoBehaviour
{
public GameObject explosion;
void OnCollisionEnter()
{
Instantiate(explosion,transform.position,transform.rotation);
Destroy(gameObject);
}
}
请注意上图,它显示了在播放模式下运行的 脚本一段代码,允许您创建自己的组件、触发游戏事件、随着时间的推移修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
参见 词汇表,实例化的 GameObject 出现在层次结构中,名称后缀为 (克隆)。