当前位置: 首页> 汽车> 时评 > 【unity笔记】三、冰山碰撞变成碎块效果

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

时间:2025/7/11 14:54:28来源:https://blog.csdn.net/qq_45906972/article/details/139751476 浏览次数: 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);}}}
}

四、效果展示

在这里插入图片描述

在这里插入图片描述

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: