【unity笔记】三、冰山碰撞变成碎块效果

7 篇文章 0 订阅

一、模型准备

共需准备两个模型,一个原始模型,一个破碎后的模型。
破碎后的模型制作教程:

  1. 下载Blender 导入原始模型
  2. 在添加偏好设置中添加Cell Fracture插件,调整模型碎裂效果。
  3. 导出,保存到项目预制体文件夹。
    在这里插入图片描述

二、导入项目

将原始文件预制体拖入场景中,添加刚体,碰撞器等组件。组件属性效果根据项目自行调优。
在这里插入图片描述

三、为冰山添加自定义脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Crest;

public class IceBreak : MonoBehaviour
{
    public GameObject brokenAfter; // 冰块破碎后的预制体
    public float forceMultiplier = 1.0f; // 施加给碎片的力的倍数
    public float maxRotationSpeed = 10.0f; // 碎片的最大旋转速度

    void OnCollisionEnter(Collision collision)
    {

        Debug.Log("碰到了");

        BreakIce();
        return;
    }

    //碰撞效果
    void BreakIce()
    {
        // 销毁原始冰块
        Destroy(gameObject);
        /*gameObject.SetActive(false);*/


        // 实例化破碎的冰块碎片
        if (brokenAfter != null)
        {
            // 在冰块位置实例化碎片
            GameObject pieceInstance = Instantiate(brokenAfter, transform.position, Quaternion.identity);

            //获取每个碎片子对象
            GameObject[] p = new GameObject[pieceInstance.transform.childCount];
            for (int i = 0; i < p.Length; i++)
            {
                p[i] = pieceInstance.transform.GetChild(i).gameObject;

                //为碎片添加刚体
                Rigidbody rb = p[i].AddComponent<Rigidbody>();
                rb.mass = 10000; //质量
                rb.drag = 10;    //阻力
                rb.useGravity = true; //重力
                rb.angularDrag = 2; //角阻力

                //为子对象添加Crest框架浮力脚本
                var s = p[i].AddComponent<SimpleFloatingObject>();
                s._boyancyTorque = 2f;
                s._accelerateDownhill = 0.15f;

                //添加网格碰撞器
                MeshCollider Collider = p[i].AddComponent<MeshCollider>();
                Collider.convex = true; //碰撞器形状设为凸面



                // 随机施加力和旋转速度
                Vector3 force = Random.insideUnitSphere * forceMultiplier;
                rb.AddForce(force, ForceMode.Impulse);
            }



        }
    }
}

四、效果展示

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值