项目需要实现模型切割,GitHub下载到插件和示例工程。发现示例工程在做单个模型多次切割时报错
后在B站Unity斩击效果看到效果如图
根据作者提供的地址连斩源码地址下载到工程,发现和自己的脚本大同小异:
`using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EzySlice;
public class SliceTest : MonoBehaviour
{
void OnTriggerEnter(Collider collision)
{
if (collision.tag != “cube”) return;
//要切割的物体为source
GameObject source = collision.gameObject;
Vector3 pos = transform.position;
Vector3 _up = transform.up;
Material material = collision.GetComponent().material;
//sliceList.Add(source);
//将Souce切割,传入的第一个参数为切割的位置(即刀片的位置),传入的第二个参数为切割面的法向量(即刀片表面的法向量)
SlicedHull hull = source.Slice(pos, _up);
// if (hull == null) return; (!!!!!划重点 在实现连斩时要判定物体是否存在。)
//创建把source切割以后的上半部分物体
GameObject obj1 = hull.CreateUpperHull(source, material);
//创建把source切割以后的下半部分物体
GameObject obj2 = hull.CreateLowerHull(source, material);
obj1.AddComponent();
obj1.AddComponent();
obj1.tag = “cube”;
obj2.AddComponent();
obj2.AddComponent();
obj2.tag = “cube”;
//因为是新建切出来两个物体,因此要把原来的物体关闭
Destroy(source);
}
}`
对照排查之后发现是在加粗部分未判定切割后的物体是否存在。在单次切割时没关系,但在靠碰撞实现多次连斩时,会出现物体还没创建出来已经开始再次读取的情况,就会报错“对象引用未设置为对象的实例”。