效果展示

1.首先先下载一个模型剖切插件Cross-Section插件 没有的下方链接自取

插件下载链接

2.下载之后导入到项目  导入之后的样子如下图

因项目需求需要剖切模型,要使用滑动条进行剖切,插件中有很多demo,其中就有使用滑动条的,可是只能进行单独一个面的剖切,换面操作模型会恢复原状,需求是可以同时操作三个面剖切,模型不恢复原状

插件demo     视频链接一      视频链接二

最后只能在插件里面修改

修改了CappedSectionBox这个脚本

修改结果如下 代码很长就折叠了

//The purpose of this script is to manipulate the scale and position of the capped section box gizmo object
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; namespace WorldSpaceTransitions
{
public class CappedSectionBox : MonoBehaviour, ISizedSection
{ //public LayerMask layer = 13;
//[Space(10)]
public Collider xAxis;
public Collider xAxisNeg;
[Space(10)]
public Collider yAxis;
public Collider yAxisNeg;
[Space(10)]
public Collider zAxis;
public Collider zAxisNeg; private enum GizmoAxis { X, Y, Z, Xneg, Yneg, Zneg, XYRotate, XZRotate, YZRotate, none };
private GizmoAxis selectedAxis; private RaycastHit hit;
private Ray ray, ray1;
private Plane dragplane;
private float rayDistance, newRotY, rayDistancePrev, distance;
private Vector3 lookCamera, startDrag, startPos, startDragRot, lookHitPoint, startScale;
private bool dragging; #region 自己加的改动 改成滑动条剖切
/// <summary>
/// 发射射线的物体 世界坐标的x轴 y轴 z轴 方向 各放一个位置作为起点
/// </summary>
public GameObject rayobj_X, rayobj_Y, rayobj_Z;
public Slider sliderX,sliderY,sliderZ; // Use this for initialization
void Start()
{ //滑动条的数值如果不是很准确 就把 maxValue minValue调试到合适的值就可以了
sliderX.maxValue = xAxis.transform.position.x;
sliderX.minValue = -(xAxis.transform.position.x);
sliderX.value = sliderX.maxValue;// + this.transform.position.x; sliderY.maxValue = yAxis.transform.position.y;
sliderY.minValue = -(yAxis.transform.position.y)/2;
sliderY.value = sliderY.maxValue;// + this.transform.position.y; //不准确自己手动调吧 其他轴不准确的也自己调一下就行了
sliderZ.maxValue = zAxis.transform.position.z;
sliderZ.minValue = -zAxis.transform.position.z;
sliderZ.value = sliderZ.maxValue; }
public void 滑动条按下(int aa)
{
if (aa==0)
{
dragplane = new Plane();
RaycastHit hit;
if (Physics.Raycast(rayobj_X.transform.position ,xAxis .transform.position , out hit, 1000f))
{
selectedAxis = GizmoAxis.X;
dragplane.SetNormalAndPosition(transform.right, transform.position);
}
distance = hit.distance;
startDrag = new Vector3(xAxis.transform.position.x, xAxis.transform.position.y, distance);
startPos = transform.position;
startScale = transform.localScale;
dragging = true;
}
else if (aa==1)
{ dragplane = new Plane();
RaycastHit hit;
if (Physics.Raycast(rayobj_Y.transform.position, yAxis.transform.position, out hit, 1000f))
{
selectedAxis = GizmoAxis.Y;
dragplane.SetNormalAndPosition(transform.up, transform.position);
} distance = hit.distance;
startDrag = new Vector3(yAxis.transform.position.x, yAxis.transform.position.y, distance);
startPos = transform.position;
startScale = transform.localScale;
dragging = true; }
else if (aa==2)
{
dragplane = new Plane();
RaycastHit hit;
if (Physics.Raycast(rayobj_Z.transform.position, zAxis.transform.position, out hit, 1000f))
{
selectedAxis = GizmoAxis.Z;
dragplane.SetNormalAndPosition(transform.forward, transform.position);
}
Debug.DrawLine(rayobj_Z.transform.position, zAxis.transform.position, Color.red,10f);
distance = hit.distance;
startDrag = new Vector3(zAxis.transform.position.x, zAxis.transform.position.y, zAxis.transform.position.z);
startPos = transform.position;
startScale = transform.localScale;
dragging = true;
} }
public void 滑动条拖动(int aa)
{
if (aa == 0)
{
if (dragging)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(sliderX.value, xAxis.transform.position.y, distance);
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.right);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.right));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
}
else if (aa==1)
{
if (dragging)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(yAxis.transform.position.x , sliderY.value, distance);
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.up);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.up));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
}
else if (aa==2)
{
if (dragging)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(zAxis.transform.position.x, zAxis.transform.position.y, (distance+sliderZ.value));
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.forward);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.forward));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
}
}
public void 滑动条停止()
{
dragging = false;
} #endregion
// Update is called once per frame
void Update()
{ //if (Input.GetMouseButtonDown(0))
//{ // ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// dragplane = new Plane(); // RaycastHit hit;
// if (xAxis.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.X;
// dragplane.SetNormalAndPosition(transform.up, transform.position);
// }
// else if (xAxisNeg.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.Xneg;
// dragplane.SetNormalAndPosition(-transform.up, transform.position);
// }
// else if (yAxis.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.Y;
// dragplane.SetNormalAndPosition(transform.forward, transform.position);
// }
// else if (yAxisNeg.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.Yneg;
// dragplane.SetNormalAndPosition(-transform.forward, transform.position);
// }
// else if (zAxis.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.Z;
// dragplane.SetNormalAndPosition(transform.up, transform.position);
// }
// else if (zAxisNeg.Raycast(ray, out hit, 1000f))
// {
// selectedAxis = GizmoAxis.Zneg;
// dragplane.SetNormalAndPosition(-transform.up, transform.position);
// }
// else
// {
// //Debug.Log(hit.collider.name);
// return;
// }
// distance = hit.distance;
// startDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));
// startPos = transform.position;
// startScale = transform.localScale;
// dragging = true;
//} //if (dragging)
//{
// ray = Camera.main.ScreenPointToRay(Input.mousePosition); // Vector3 onDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));
// Vector3 translation = onDrag - startDrag;
// Vector3 projectedTranslation = Vector3.zero; // if (dragging)
// {
// float lsx = startScale.x;
// float lsy = startScale.y;
// float lsz = startScale.z; // switch (selectedAxis)
// {
// case GizmoAxis.X:
// {
// projectedTranslation = Vector3.Project(translation, transform.right);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.right));
// break;
// }
// case GizmoAxis.Xneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.right);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.right));
// break;
// }
// case GizmoAxis.Y:
// {
// projectedTranslation = Vector3.Project(translation, transform.up);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.up));
// break;
// }
// case GizmoAxis.Yneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.up);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.up));
// break;
// }
// case GizmoAxis.Z:
// {
// projectedTranslation = Vector3.Project(translation, transform.forward);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.forward));
// break;
// }
// case GizmoAxis.Zneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.forward);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.forward));
// break;
// } // } // transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity)); // //foreach (UVScaler uvs in gameObject.GetComponentsInChildren<UVScaler>()) uvs.SetUV();
// } // if (Input.GetMouseButtonUp(0))
// {
// dragging = false;
// }
//}
} public void HideCage(bool val)
{
foreach (PlaneHover ph in gameObject.GetComponentsInChildren<PlaneHover>()) ph.GetComponent<Renderer>().enabled = val;
}
public void HideCaps(bool val)
{
foreach (Transform quad in gameObject.transform) if (quad.name.Contains("hatch")) quad.GetComponent<Renderer>().enabled = val;
} public void Size(Bounds b, GameObject g, BoundsOrientation orientation)
{
//Debug.Log(b.ToString());
float scale = 1f; Vector3 clearance = 0.01f * Vector3.one; transform.localScale = Vector3.one; transform.localScale = scale * b.size + clearance; transform.position = b.center;
}
}
}

CappedSectionBox

修改完之后就是效果展示的样子了

项目Hierarchy截图  用的就是插件里面带的demo

最后再把插件修改过后的资源包发一下吧,以免其他小伙伴出错

修改之后的插件资源包下载

亲测2021.3.4可以打包

之后又更改了既可以滑动条模型剖切,也可以鼠标点击模型进行剖切

只改了一个脚本如下 复制替换即可 

//The purpose of this script is to manipulate the scale and position of the capped section box gizmo object
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; namespace WorldSpaceTransitions
{
public class CappedSectionBox : MonoBehaviour, ISizedSection
{ //public LayerMask layer = 13;
//[Space(10)]
public Collider xAxis;
public Collider xAxisNeg;
[Space(10)]
public Collider yAxis;
public Collider yAxisNeg;
[Space(10)]
public Collider zAxis;
public Collider zAxisNeg; private enum GizmoAxis { X, Y, Z, Xneg, Yneg, Zneg, XYRotate, XZRotate, YZRotate, none };
private GizmoAxis selectedAxis; private RaycastHit hit;
private Ray ray, ray1;
private Plane dragplane;
private float rayDistance, newRotY, rayDistancePrev, distance;
private Vector3 lookCamera, startDrag, startPos, startDragRot, lookHitPoint, startScale;
private bool dragging;
private bool dragging_; #region 自己加的改动 改成滑动条剖切
/// <summary>
/// 发射射线的物体
/// </summary>
//public GameObject rayobj_X, rayobj_Y, rayobj_Z;
public Slider sliderX, sliderY, sliderZ; private float floatminX, floatminY, floatminZ, floatmaxX, floatmaxY, floatmaxZ;
private float flokmax, flokmay, flokmaz;
private float blx, bly, blz; // Use this for initialization
void Start()
{ //GetSliderData();
}
public void GetSliderData()
{
floatminX = xAxisNeg.transform.position.x;
floatminY = yAxisNeg.transform.position.y;
floatminZ = zAxisNeg.transform.position.z; floatmaxX = xAxis.transform.position.x;
floatmaxY = yAxis.transform.position.y;
floatmaxZ = zAxis.transform.position.z; sliderX.maxValue = floatmaxX;
sliderX.minValue = floatminX;
sliderX.value = floatmaxX;// + this.transform.position.x; sliderY.maxValue = floatmaxY;
sliderY.minValue = floatminY;
sliderY.value = floatmaxY;// + this.transform.position.y; sliderZ.maxValue = floatmaxZ;
sliderZ.minValue = floatminZ;
sliderZ.value = floatmaxZ; flokmax = transform.localScale.x;
flokmay = transform.localScale.y;
flokmaz = transform.localScale.z; blx = GetSpecific_value(floatmaxX, floatminX, flokmax);
bly = GetSpecific_value(floatmaxY, floatminY, flokmay);
blz = GetSpecific_value(floatmaxZ, floatminZ, flokmaz); }
public void 滑动条按下(int aa)
{
if (aa == 0)
{
dragplane = new Plane();
RaycastHit hit;
if (xAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.X;
dragplane.SetNormalAndPosition(transform.right, transform.position);
}
distance = hit.distance;
startDrag = new Vector3(xAxis.transform.position.x, xAxis.transform.position.y, distance);
startPos = transform.position;
startScale = transform.localScale;
}
else if (aa == 1)
{ dragplane = new Plane();
RaycastHit hit;
//if (Physics.Raycast(rayobj_Y.transform.position, yAxis.transform.position, out hit, 1000f))
if (yAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Y;
dragplane.SetNormalAndPosition(transform.up, transform.position);
}
distance = hit.distance;
startDrag = new Vector3(yAxis.transform.position.x, yAxis.transform.position.y, distance);
startPos = transform.position;
startScale = transform.localScale;
}
else if (aa == 2)
{
dragplane = new Plane();
RaycastHit hit;
if (zAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Z;
dragplane.SetNormalAndPosition(transform.forward, transform.position);
}
//Debug.DrawLine(rayobj_Z.transform.position, zAxis.transform.position, Color.red, 10f);
distance = hit.distance;
startDrag = new Vector3(zAxis.transform.position.x, zAxis.transform.position.y, zAxis.transform.position.z);
startPos = transform.position;
startScale = transform.localScale;
}
滑动条拖动(aa); }
public void 滑动条拖动(int aa)
{
if (aa == 0)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(sliderX.value, xAxis.transform.position.y, distance);
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.right);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.right));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
else if (aa == 1)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(yAxis.transform.position.x, sliderY.value, distance);
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.up);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.up));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
else if (aa == 2)
{
float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z;
Vector3 onDrag = new Vector3(zAxis.transform.position.x, zAxis.transform.position.y, (sliderZ.value-distance));
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; projectedTranslation = Vector3.Project(translation, transform.forward);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.forward));
transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));
}
}
#endregion
// Update is called once per frame
void Update()
{ if (Input.GetMouseButtonDown(0) && EventSystem.current.IsPointerOverGameObject() == false)
{ ray = Camera.main.ScreenPointToRay(Input.mousePosition);
dragplane = new Plane(); RaycastHit hit;
if (xAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.X;
dragplane.SetNormalAndPosition(transform.up, transform.position);
}
else if (xAxisNeg.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Xneg;
dragplane.SetNormalAndPosition(-transform.up, transform.position);
}
else if (yAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Y;
dragplane.SetNormalAndPosition(transform.forward, transform.position);
}
else if (yAxisNeg.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Yneg;
dragplane.SetNormalAndPosition(-transform.forward, transform.position);
}
else if (zAxis.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Z;
dragplane.SetNormalAndPosition(transform.up, transform.position);
}
else if (zAxisNeg.Raycast(ray, out hit, 1000f))
{
selectedAxis = GizmoAxis.Zneg;
dragplane.SetNormalAndPosition(-transform.up, transform.position);
}
else
{
//Debug.Log(hit.collider.name);
return;
}
distance = hit.distance;
startDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));
startPos = transform.position;
startScale = transform.localScale; dragging_ = true;
} if (dragging_)
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 onDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));
Vector3 translation = onDrag - startDrag;
Vector3 projectedTranslation = Vector3.zero; float lsx = startScale.x;
float lsy = startScale.y;
float lsz = startScale.z; switch (selectedAxis)
{
case GizmoAxis.X:
{
projectedTranslation = Vector3.Project(translation, transform.right);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.right));
break;
}
//case GizmoAxis.Xneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.right);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.right));
// break;
// }
case GizmoAxis.Y:
{
projectedTranslation = Vector3.Project(translation, transform.up);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.up));
break;
}
//case GizmoAxis.Yneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.up);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.up));
// break;
// }
case GizmoAxis.Z:
{
projectedTranslation = Vector3.Project(translation, transform.forward);
transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.forward));
break;
}
//case GizmoAxis.Zneg:
// {
// projectedTranslation = Vector3.Project(translation, -transform.forward);
// transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
// lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.forward));
// break;
// } } transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity)); //比例值根据公式计算所得 lsx (框)的区间 是0-lsx 滑动条上面也有一个值的区间 min-max
//公式: (0*x)+y= 滑动条最小值 min
// (lsx*x)+y=滑动条最大值 max
//最后求出 x值 y值 带进去即可 因为模型大小都不一样,比例值也不一致,需要自行计算
sliderX.value = lsx * blx + floatminX;
sliderY.value = lsy * bly + floatminY;
sliderZ.value = lsz * blz + floatminZ; if (Input.GetMouseButtonUp(0))
{
dragging_ = false;
}
}
}
public float GetSpecific_value(float MAX, float MIN, float LXYZ)
{
float AA = (MAX - MIN) / LXYZ;
return AA;
} public void HideCage(bool val)
{
foreach (PlaneHover ph in gameObject.GetComponentsInChildren<PlaneHover>()) ph.GetComponent<Renderer>().enabled = val;
}
public void HideCaps(bool val)
{
foreach (Transform quad in gameObject.transform) if (quad.name.Contains("hatch")) quad.GetComponent<Renderer>().enabled = val;
} public void Size(Bounds b, GameObject g, BoundsOrientation orientation)
{
//Debug.Log(b.ToString());
float scale = 1f; Vector3 clearance = 0.01f * Vector3.one; transform.localScale = Vector3.one; transform.localScale = scale * b.size + clearance; transform.position = b.center;
}
}
}

修改之后的脚本

再加一个自动设置剖切的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WorldSpaceTransitions; public class AutoSheScript : MonoBehaviour
{
public GameObject pouqieObj;
public SectionSetup sectionSetup_;
public CappedSectionBox cappedSectionBox_; // Start is called before the first frame update
void Start()
{
//模型标签"PouQie"
pouqieObj = GameObject.FindGameObjectWithTag("PouQie");
}
//执行剖切 剖切框就会自动设置好
public void Perform_Cutting()
{ sectionSetup_.model = pouqieObj;
sectionSetup_.RecalculateBounds();
sectionSetup_.CheckShaders();
sectionSetup_.CreateSectionMaterials();
cappedSectionBox_.GetSliderData(); }
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown (KeyCode.Space))
{
Perform_Cutting();
}
}
}

自动设置剖切

修改之后的效果

没有积分的可以评论区联系我,看到会回复的

如果喜欢请给我点个赞吧,谢谢

搜索

复制

Unity模型剖切的更多相关文章

  1. xBIM WeXplorer xViewer的导航,相机、剖切、隐藏 等操作

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  2. SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何实现对三维模型和地形的剖切展示

    现在很多三维项目中,不仅仅要用到三维地形,正射影像和矢量数据,还会融合到各种三维模型,包括传统的3DMax手工建模,BIM,倾斜摄影自动建模,激光点云模型,三维地质体模型等等. 三维平台首先要做的是把 ...

  3. xBIM 基础12 WeXplorer xViewer的导航、相机、剖切、隐藏等操作

    系列目录    [已更新最新开发文章,点击查看详细]  本篇将学习xViewer的导航,剪切和隐藏.这应该足以使用户能够通过所有缩放,平移,轨道运行和隐藏可能的障碍物来检查建筑物内部.点击这里可以看到 ...

  4. 【VR视频播放】解决Unity模型贴图反转的问题

    使用UV贴图网模型上贴的时候, 会出现图片反过来的情况. 根本原因是因为, 一般系统的屏幕坐标系(例如Android)是左上角为原点(0,0), 但是Unity的贴图是以左下角为原点(0,0) 方法有 ...

  5. Unity模型导入的若干问题

    原地址:http://tieba.baidu.com/p/2807225555 我觉得有三点感觉在导出时比较重要的1.单位的设置3dsmax系统单位设置就设成厘米显示单位公制也设成厘米这样在max里的 ...

  6. unity模型任意无限切割插件

    概述 3d模型的任意切割一直是游戏开发里的一个很大的问题,模型切割的关键点就只有生成横切面的新顶点以及切口纹理的缝合,理论上解决了这两点,就近乎可以做到以假乱真的程度了.本篇文章就这两点进行描述 详细 ...

  7. unity 模型层次细节

    http://blog.csdn.net/qq_25210959/article/details/51734517 层次细节(LOD),它是根据物体在游戏画面中所占视图的百分比来调用不同复杂度的模型的 ...

  8. unity模型法线反转问题

    fbx模型导入unity正常 但只要绑了骨骼,在3dmax中正常,进入unity就法线反转 原因是3dmax中模型用到复制和镜像的导出需要多一步处理 1重置变换 2反转法线 按顺序进行这两个,在绑定模 ...

  9. Unity 模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

  10. Unity模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

随机推荐

  1. angular11 报错 ERROR Error: If ngModel is used within a form tag, either the name attribute must be set or the form

    angular 报错 ERROR Error: If ngModel is used within a form tag, either the name attribute must be set ...

  2. 网络爬虫及openyxl模块

    网络爬虫及openyxl模块 一.第三方模块简介 1.第三方模块的用处 python之所以在这么多的编程语言中脱颖而出的优点是有众多的第三方库函数,可以更高效率的实现开发 2.第三方模块的使用 1.第 ...

  3. Java入门与进阶P-3.7+P-3.8

    猜数游戏 让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它这是大了还是小了,知道用户猜中为止,最后还要告诉用户它猜了多少次 因为需要不断重复让用户猜,所以需要用到循环 在实际写出程序之前 ...

  4. 异常机制(Exception)

    异常机制(Exception) 什么是异常 实际工作中,遇到的情况不肯恩格式非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者格式不对,你要读 ...

  5. 12月1日内容总结——表单标签知识补充、css介绍、css选择器和选择器的优先级、css样式调解

    目录 一.表单标签的补充说明 1.用于获取用户数据的标签至少应该含有name属性 2.如果不需要用户填写数据 只需要选择 那么我们需要自己填写value 3.针对input标签理论上应该配一个labe ...

  6. 11月18日内容总结——同步、异步与阻塞、非阻塞的概念、创建进程的多种方式及multiprocessing模块、进程间的数据隔离和IPC机制(队列)、生产者消费者模型、守护进程、僵尸进程、孤儿进程和多进程错乱问题

    目录 一.同步与异步 同步 异步 二.阻塞与非阻塞 阻塞 非阻塞 三.综合使用 1.同步阻塞: 2.同步非阻塞: 3.异步阻塞: 4.异步非阻塞: 四.创建进程的多种方式 进程的创建 multipro ...

  7. 本地python环境安装kylin项目依赖时报认证错误信息

    问题描述:项目需要连接kylin数据库查询数据,本地安装kylin项目的依赖环境后报认证错误 python版本3.7 32位 pycharm版本 2022版 成功方法: 更换解释器选择无解释器,创建虚 ...

  8. 安装和配置Maven项目管理工具

    1.下载Maven工具包:https://maven.apache.org/download.cgi 2.解压apache-maven-3.8.4-bin.zip 3.修改apache-maven-3 ...

  9. C++梳理

    1.基础篇 1.C++ 中的四种智能指针 为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况的发⽣.使⽤智能指针可以很⼤程度上的避免这个 ...

  10. 有趣的python库-turtle

    turtle-绘制图像用 画樱花树 import turtle as tt import random # 画樱花的躯干(60,t) def tree(branch, t): if branch &g ...