Xungerrrr's Blog

Unity 3D - 汽车尾气模拟

3D 游戏编程与设计 第十二周作业

Word count: 421Reading time: 1 min
2018/05/29 Share

粒子系统设计

新建粒子系统,设定粒子材料为 ParticleSmokeBlack ,并修改参数如下:

修改 Shape 的 形状和半径参数

修改粒子模块基本参数如下

修改 Size over Lifetime 曲线如下,使尾气烟雾逐渐扩散出去

在 CarCollide 类中,根据碰撞速度,调整车辆的损坏程度。

1
2
3
4
5
6
7
8
public class CarCollide : MonoBehaviour
{
public float damage = 1;
private void OnCollisionEnter(Collision collision) {
// 速度越大,损坏越大
damage += this.gameObject.GetComponent<Rigidbody>().velocity.magnitude;
}
}

在 SmokeController 类中控制尾气随引擎负荷、车辆损坏程度的变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Vehicles.Car;

public class SmokeController : MonoBehaviour
{
public float engineRevs; // 引擎负荷
public float exhaustRate; // 尾气变化率
public float damage; // 车辆损坏情况
public GameObject car; // 车辆
public CarController carController; // 车辆控制器
public CarCollide carCollide; // 车辆碰撞检测

ParticleSystem exhaust; // 尾气粒子系统

void Start() {
exhaust = GetComponent<ParticleSystem>();
car = this.transform.parent.parent.gameObject;
carController = car.GetComponent<CarController>();
carCollide = car.GetComponent<CarCollide>();
exhaustRate = 5000;
}

void Update() {
engineRevs = carController.Revs;
damage = carCollide.damage;
// 动态修改 emissionRate。引擎负荷越大,粒子产生率越大。
exhaust.emissionRate = Mathf.Pow(engineRevs, 5) * exhaustRate + 30;

var col = exhaust.colorOverLifetime;
Gradient grad = new Gradient();
// 根据车辆损坏程度修改尾气深浅。损坏越大,颜色越深。
grad.SetKeys(new GradientColorKey[] { new GradientColorKey(Color.white, 0.0f), new GradientColorKey(new Color(214, 189, 151), 0.079f), new GradientColorKey(Color.white, 1.0f)},
new GradientAlphaKey[] { new GradientAlphaKey(0.0f, 0.0f), new GradientAlphaKey(damage / 255f + 10f / 255f, 0.061f), new GradientAlphaKey(0.0f, 1.0f) });
col.color = grad;
}
}

效果预览

初始尾气效果

多次碰撞后静止效果

多次碰撞后运行效果

视频地址

http://v.youku.com/v_show/id_XMzYzMzg0MDgzNg==.html?spm=a2h3j.8428770.3416059.1

项目地址

GitHub.

返回 Unity 3D Learning

CATALOG
  1. 1. 粒子系统设计
    1. 1.1. 修改 Shape 的 形状和半径参数
    2. 1.2. 修改粒子模块基本参数如下
    3. 1.3. 修改 Size over Lifetime 曲线如下,使尾气烟雾逐渐扩散出去
    4. 1.4. 在 CarCollide 类中,根据碰撞速度,调整车辆的损坏程度。
    5. 1.5. 在 SmokeController 类中控制尾气随引擎负荷、车辆损坏程度的变化
  2. 2. 效果预览
  3. 3. 视频地址
  4. 4. 项目地址