Unity的C#编程教程_7_制作炸毁物体的效果
程序员文章站
2024-01-18 19:19:16
...
- Asset store 搜索 Crash Crate,免费下载素材
- 把整体的 Object 和 碎片 Object 都加入场景
- 创建 C# Script,命名为 Crate(条板箱的意思),挂载到整体箱子的下面
- 把碎片箱子反**,进行隐藏
- 我们希望在按下 空格键的时候,可以把箱子炸掉
- 打开脚本
- 创建一个 public 游戏对象变量 fracturedCrate,然后进入编辑窗口把碎片箱子拖进去
- PS:这里最好调整一下碎片箱子和整体箱子的坐标做到匹配
- 然后删除场景中的碎片箱子
- 下载官方的粒子素材,里面由爆炸效果
- 爆炸效果拖入场景,把 Loop 勾选去除(所有组件都要去掉勾),不要循环,只要一次爆炸,应用到预制件
- 在脚本里加上公共变量 explosionEffect,把爆炸效果预制件拖进去,场景中的删除
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Crate : MonoBehaviour
{
public GameObject fracturedCrate;
public GameObject explosionEffect;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(explosionEffect, transform.position, Quaternion.identity);
// 生成爆炸效果,同样位置,保持不旋转
//Instantiate(fracturedCrate, transform.position, Quaternion.identity);
// 生成碎片箱子,在同样的位置,保持不旋转
GameObject fracturedCrateObj = Instantiate(fracturedCrate, transform.position, Quaternion.identity);
// 生成碎片箱子的游戏对象,并赋值到一个变量
Rigidbody[] allRigidBodies = fracturedCrateObj.GetComponentsInChildren<Rigidbody>();
// 获取所有子对象的刚体,注意这里 Components 的 s 不能少了!
// 放入一个列表中
if (allRigidBodies.Length > 0) // 判断成功获取了刚体
{
foreach(var body in allRigidBodies)
{
body.AddExplosionForce(1000, transform.position, 1);
// 施加一个爆炸的力量,1000牛顿,位置就在当前位置,辐射半径为 1
}
}
Destroy(gameObject);
// 消除整体箱子
}
}
}