Version: 6000.3
语言: 中文
使用预制件构建结构
预制件实例检查器参考

实例化射弹和爆炸

您可以实例化预制件一种资产类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,你可以从中在场景中创建新的对象实例。更多信息
请参阅术语表
用作射弹,并在应用程序中使用爆炸效果摧毁它们。

以下示例在用户按下开火按钮时实例化射弹预制件。您可以将其附加到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
它充当预制件的启动器。

创建射弹预制件资产

  1. 在 层级(Hierarchy) 中,右键单击并选择 3D 对象(3D Object > Sphere)。
  2. 选择球体,然后在其检查器中选择 Add Component > Rigidbody。球体需要刚体,以便它可以在空中飞行并检测何时发生碰撞。
  3. 将球体重命名为Projectile,然后将其拖到Assets文件夹以创建预制件资源
  4. 然后,你可以从层级中删除球体。

您可以选择添加texture渲染游戏对象、精灵或 UI 元素时使用的图像。纹理通常应用于网格表面,以赋予其视觉细节。更多信息
请参阅术语表
添加到预制件,更改其尺寸,或导入不同的模型对象(例如角色、建筑物或家具)的 3D 模型表示。更多信息
请参阅术语表
充当弹丸。

将爆炸脚本添加到射弹预制件资源

要向射弹预制件添加爆炸,您必须具有代表爆炸的预制件资产。您可以使用粒子系统通过在场景中生成大量小型 2D 图像并为其制作动画来模拟液体、云和火焰等流体实体的组件。更多信息
请参阅术语表
创建预制件资源,或在Asset StoreUnity 和社区成员创建的不断增长的免费和商业资产库。提供各种各样的资产,从纹理、模型和动画到整个项目示例、教程和编辑器扩展。更多信息
请参阅术语表
并将其添加到Assets文件夹。

然后创建一个名为Projectile如下:

using UnityEngine;

public class Projectile : MonoBehaviour
{

    public GameObject explosion;
    void Start()
    {
         // Deletes the projectile after 10 seconds, regardless
         // of whether it collided with anything. This prevents
         // instances from staying in the scene indefinitely.
         Destroy(gameObject,10);
    }
    void OnCollisionEnter()
    {
        // When the projectile hits something, create an explosion
        // and remove the projectile.
        Instantiate(explosion,transform.position,transform.rotation);
        Destroy(gameObject);
    }
}

该脚本在射弹的当前位置实例化爆炸,并在射弹与某物碰撞时删除射弹游戏对象。

要使用该脚本,请将其附加到射弹预制件资产:

  1. 选择Projectile预制件资源,并在预制件编辑模式下打开它。
  2. 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    ,拖动Projectile脚本到它上面。
  3. 将爆炸预制件资源拖到 爆炸(Explosion) 字段中。

创建脚本来发射射弹

要启动射弹,您需要创建一个脚本,用于在按下开火键时实例化射弹,并将该脚本添加到游戏对象。

创建一个名为FireProjectile并向其中添加以下内容:

using UnityEngine;
using UnityEngine.InputSystem;

public class FireProjectile : MonoBehaviour
{
    // Only GameObjects with a Rigidbody can be assigned as the projectile.
    public Rigidbody projectile;
    // Speed of the projectile when fired.
    // This is a public variable so it can be adjusted in the Unity Editor.
    public float speed = 4;
    // Update is called once per frame
    // This method checks for input and fires a projectile if the attack action is pressed.
    void Update()
    {
        // Check if the "Attack" action was pressed this frame
        // If it was, instantiate a projectile at the player's position and set its velocity.
        if (InputSystem.actions.FindAction("Attack").WasPressedThisFrame())
        {
            Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);
            p.linearVelocity = transform.forward * speed;
        }
    }
}

此脚本使用Instantiate发射射弹。创建公共预制件变量时,变量类型可以是游戏对象,也可以是任何有效的组件类型(内置 Unity 组件或您自己的 MonoBehaviour 脚本之一)。

对于组件类型变量(例如 Rigidbody、Collider 和 Light),您只能将该组件类型的游戏对象分配给变量,并且Instantiate函数返回对新游戏对象实例上该特定组件的引用。

将启动器脚本附加到游戏对象

您必须将脚本附加到游戏对象才能使用它。为此,请执行以下作:

  1. 确保场景具有用于射弹碰撞的地面游戏对象。如果使用的是空项目,请创建一个平面游戏对象:右键单击“层次结构”,然后选择“平面> 3D 对象”。
  2. 创建立方体游戏对象:右键单击层次结构,选择立方体> 3D 对象并将其放置在平面上。
  3. 选择多维数据集,然后在其检查器中删除碰撞体(Collider) 用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格体形状完全相同 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
    请参阅术语表
    元件。如果不删除此组件,射弹会在落地之前与立方体发生碰撞。
  4. FireProjectile脚本到多维数据集上。
  5. Projectileprefab 资源添加到 Fire Projectile 脚本的 Projectile 字段中。
  6. 进入播放模式,然后单击鼠标按钮。

立方体发射球体射弹,当它们与地面碰撞时会发生爆炸。

射弹和爆炸预制件被实例化和销毁。
射弹和爆炸预制件被实例化和销毁。

请注意,任何实例化的对象都显示在层次结构中,并带有(Clone)附加到名称后。

其他资源

使用预制件构建结构
预制件实例检查器参考