欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
            // 消除整体箱子
        }
    }
}