往期博客[Unity学习笔记:FPS游戏制作(2)] 发射子弹————(2021.6.20学习笔记)
文章目录
一,实现思路
使用粒子系统制作子弹拖尾特效与子弹碰撞特效,碰撞碎屑飞溅特效。在子弹生成的时候,将拖尾粒子效果置于子弹的子物体集中,保证拖尾粒子效果能跟随子弹物体一起运动,然后在子弹碰撞到物体的时候,在子弹位置生成碰撞特效与碎屑飞溅特效
二,粒子效果的实现
(1)子弹拖尾特效的实现
新建一个粒子系统对象,重命名为BulletTailE,修改参数值如下图
子弹拖尾特效实现效果如下图
(2)枪口火焰特效的实现
新建一个粒子系统对象,重命名为OpenFireP,修改参数值如下图
枪口火焰特效实现效果如下图
(3)碎屑飞溅特效的实现
新建一个粒子系统对象,重命名为ExplosionDetritus,修改参数值如下图
碎屑飞溅特效实现效果如下图
(4)子弹碰撞爆炸波特效的实现
新建一个粒子系统对象,重命名为ExplosionEffect,修改参数值如下图
子弹碰撞爆炸波特效实现效果如下图
(5)子弹碰撞特效的实现
将碎屑飞溅特效设置为爆炸波特效的子物体,使两个特效合成为子弹碰撞特效,效果如下图
三,子弹与物体碰撞触发粒子特效的实现
(1)设置子弹预制体与被碰撞物体的参数
给子弹预制体添加刚体与碰撞体组件,并将碰撞体组件的IsTrigger选项点开,然后给被碰撞物体添加碰撞体组件,详细设置如下图
(2)子弹碰撞物体触发特效代码的实现
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletScript : MonoBehaviour
{
public GameObject BulletTPrefab;//子弹拖尾特效预制体
public GameObject ExplosionPrefab;//子弹爆炸特效预制体
void Start()
{
GameObject BulletTail = Instantiate(BulletTPrefab);
BulletTail.transform.parent = transform;
BulletTail.transform.rotation = transform.rotation;
BulletTail.transform.localPosition = new Vector3(0, 0, 0);//在指定坐标生成子弹
}
void Update()
{
}
private void OnTriggerEnter(Collider other)//当物体接触到另外一个刚体时触发
{
GameObject ExplosionEffect = Instantiate(ExplosionPrefab,transform.position,transform.rotation);
Destroy(ExplosionEffect, 2);
}
}
把该脚本挂载于子弹预制体