Unity3D射击效果

2016年11月29日 14:10 0 点赞 0 评论 更新于 2025-11-21 14:31

具体实施步骤

1. 场景布置

首先,布置一个场景。创建一个空对象(Empty GameObject),将其作为子弹的发射点。接着,创建一个立方体(Cube),调整其大小和位置,确保它与子弹发射点在 Z 轴上处于同一位置。后续创建的子弹将沿着 Z 轴运动并射击到该立方体上。

2. 子弹创建

创建一个空对象(Empty GameObject),再创建一个胶囊体(Capsule)用于模拟子弹。调整胶囊体的大小,移除其 Capsule Collider 组件。然后,将胶囊体挂载到刚创建好的空对象下,并为空对象添加 Rigidbody 和 Capsule Collider 组件。

3. 脚本编写

我们需要编写几个脚本,分别用于控制子弹发射、子弹移动以及子弹撞击立方体时触发效果。

控制发射子弹的脚本

using UnityEngine;
using System.Collections;

public class _Shoot : MonoBehaviour
{
public Transform rocket;

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(rocket, transform.position, Quaternion.identity);
}
}
}

此脚本的作用是在按下空格键时,在发射点的位置实例化一个子弹对象。

子弹移动的脚本

using UnityEngine;
using System.Collections;

public class _RocketMove : MonoBehaviour
{
public Vector3 v;

void Start()
{
v = new Vector3(0, 0, 100);
}

void Update()
{
transform.position += v * Time.deltaTime;
}
}

该脚本在子弹对象开始运行时,为其设置一个沿着 Z 轴正方向的速度向量。在每帧更新时,根据该速度向量和时间增量来更新子弹的位置,实现子弹的移动。

子弹撞击 Cube 触发效果的脚本

using UnityEngine;
using System.Collections;

public class _Collision : MonoBehaviour
{
public Transform explosionPrefab;

void OnCollisionEnter(Collision collision)
{
ContactPoint contact = collision.contacts[0];
Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
Vector3 pos = contact.point;
Instantiate(explosionPrefab, pos, rot);
Destroy(this.gameObject);
}
}

由于前两个脚本逻辑相对简单,这里主要详细讲解第三个脚本。此脚本是基于 Unity API 提供的一个范例,主要利用 OnCollisionEnter 事件触发来实现击打效果。具体解释如下:

  • explosionPrefab:用于存放粒子效果的预制体(Prefab)。
  • OnCollisionEnter 事件:当子弹与其他物体发生碰撞时触发。
  • ContactPoint contact = collision.contacts[0]:获取碰撞的接触点信息。collision 参数表示被碰物体的碰撞信息,它包含一个碰撞点信息的数组,这里获取其下标为 0 的碰撞点。
  • Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal):使用 FromToRotation 方法获取一个从 Vector3.upcontact.normal 的旋转。其中,normal 表示接触点的法向量。
  • Vector3 pos = contact.point:获取碰撞点的位置。
  • Instantiate(explosionPrefab, pos, rot):在碰撞点位置创建粒子效果。
  • Destroy(this.gameObject):销毁子弹本身。

4. 脚本挂载与设置

将第一个脚本(_Shoot)挂载到子弹的发射器上,后两个脚本(_RocketMove_Collision)挂载到子弹对象上。将子弹对象制作成预制体(Prefab),然后将该预制体指定给子弹发射器脚本中的 rocket 变量。对于粒子效果,可以导入 Unity 自带的粒子系统包,选择合适的效果并将其指定给子弹脚本中的 explosionPrefab 变量。

5. 运行测试

运行游戏,你将看到子弹碰到立方体时会消失,并产生一个粒子效果。