ezyslice 切割代碼記錄

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using EzySlice;

public class SlicerManager : MonoBehaviour

{

? ? //public GameObject source;

? ? public Transform T;

? ? public Vector3 t1, t2;

? ? public LayerMask drawLayer;

? ? public LayerMask objLayer;

? ? public List<GameObject> sources = new List<GameObject>();? ? ? ? ? ? ? //正在切割的物體集合

? ? public List<GameObject> allObj = new List<GameObject>();? ? ? ? ? ? ? ? //所有被切割物體集合

? ? public Material crossMat;

? ? public Vector3 originPos;

? ? public Quaternion originRot;

? ? public GameObject sphere;

? ? public bool? isSlice;? ? ? ? ? ? ? //根據(jù)這個值來執(zhí)行切割/組合

? ? private void Awake()

? ? {

? ? ? ? originPos = sphere.transform.position;? ? ? ? ? ? ? //初始化原始網(wǎng)格初始位置胚嘲,combine時需用到

? ? ? ? originRot = sphere.transform.rotation;

? ? }

? ? private void Update()

? ? {

? ? ? ? if (isSlice) SlicePrep();

? ? ? ? else Combine();

? ? }

? ? /// <summary>

? ? /// 定義需要切割的網(wǎng)格勉盅,及網(wǎng)格切割位置

? ? /// </summary>

? ? private void SlicePrep()

? ? {


? ? ? ? if (Input.GetMouseButtonDown(0))

? ? ? ? {

? ? ? ? ? ? RaycastHit hit;

? ? ? ? ? ? if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 1000, drawLayer))

? ? ? ? ? ? {

? ? ? ? ? ? ? // t1 = hit.point;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if (Input.GetMouseButton(0))

? ? ? ? {

? ? ? ? ? ? ? ? RaycastHit hit;

? ? ? ? ? ? ? ? if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 1000,objLayer))

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (hit.collider.CompareTag("Slicer"))

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if (!sources.Contains(hit.collider.gameObject))

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? t1 = hit.point;

? ? ? ? ? ? ? ? ? ? ? ? sources.Add(hit.collider.gameObject);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? t2 = hit.point;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(sources.Count > 0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Slice();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? else if (sources.Count > 0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? Slice();

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if (Input.GetMouseButtonUp(0))

? ? ? ? {

? ? ? ? ? ? RaycastHit hit;

? ? ? ? ? ? if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 1000, drawLayer))

? ? ? ? ? ? {

? ? ? ? ? ? ? // t2 = hit.point;

? ? ? ? ? ? }

? ? ? ? ? ? Slice();

? ? ? ? }

? ? }

? ? /// <summary>

? ? /// 切割網(wǎng)格

? ? /// </summary>

? ? private void Slice()

? ? {

? ? ? ? foreach (var source in sources)

? ? ? ? {

? ? ? ? ? ? T.position = (t1 + t2) / 2;

? ? ? ? ? ? T.right = t2 - t1;

? ? ? ? ? ? SlicedHull hull = source.Slice(T.position,T.up);

? ? ? ? ? ? if (hull != null)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? GameObject u = hull.CreateUpperHull(source, crossMat);

? ? ? ? ? ? ? ? GameObject l = hull.CreateLowerHull(source, crossMat);

? ? ? ? ? ? ? ? u.AddComponent<Rigidbody>();

? ? ? ? ? ? ? ? l.AddComponent<Rigidbody>();

? ? ? ? ? ? ? ? u.AddComponent<MeshCollider>().convex = true;

? ? ? ? ? ? ? ? l.AddComponent<MeshCollider>().convex = true;

? ? ? ? ? ? ? ? u.tag = "Slicer";

? ? ? ? ? ? ? ? l.tag = "Slicer";

? ? ? ? ? ? ? ? u.layer = LayerMask.NameToLayer("SliceObj");

? ? ? ? ? ? ? ? l.layer = LayerMask.NameToLayer("SliceObj"); ;

? ? ? ? ? ? ? ? u.GetComponent<Rigidbody>().AddForce(Vector3.up * 400);

? ? ? ? ? ? ? ? u.transform.parent = transform;

? ? ? ? ? ? ? ? l.transform.parent = transform;

? ? ? ? ? ? ? ? // source.SetActive(false);

? ? ? ? ? ? ? ? Destroy(source);

? ? ? ? ? ? ? ? if (allObj.Contains(source))

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? allObj.Remove(source);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? allObj.Add(u);

? ? ? ? ? ? ? ? allObj.Add(l);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? sources.Clear();? ? ? ? ? ? //每次切割完后清楚當(dāng)前需切割網(wǎng)格List

? ? }

? ? /// <summary>

? ? /// 網(wǎng)格組合

? ? /// </summary>

? ? private void Combine()

? ? {


? ? ? ? foreach (var item in allObj)

? ? ? ? {

? ? ? ? ? ? if (Vector3.Distance(item.transform.position, originPos) > 0.02f)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? item.transform.position = Vector3.Lerp(item.transform.position,originPos,0.02f);


? ? ? ? ? ? }

? ? ? ? ? ? if (!Quaternion.Equals(item.transform.rotation,originRot))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? item.transform.rotation = Quaternion.Lerp(item.transform.rotation, originRot, 0.02f);

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市设捐,隨后出現(xiàn)的幾起案子梗夸,更是在濱河造成了極大的恐慌层玲,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件反症,死亡現(xiàn)場離奇詭異辛块,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铅碍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門润绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胞谈,你說我怎么就攤上這事授药∈亢浚” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵悔叽,是天一觀的道長莱衩。 經(jīng)常有香客問我,道長娇澎,這世上最難降的妖魔是什么笨蚁? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮趟庄,結(jié)果婚禮上括细,老公的妹妹穿的比我還像新娘。我一直安慰自己戚啥,他們只是感情好奋单,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猫十,像睡著了一般览濒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拖云,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天贷笛,我揣著相機(jī)與錄音,去河邊找鬼宙项。 笑死乏苦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尤筐。 我是一名探鬼主播汇荐,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盆繁!你這毒婦竟也來了掀淘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤改基,失蹤者是張志新(化名)和其女友劉穎繁疤,沒想到半個月后咖为,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秕狰,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年躁染,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸣哀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吞彤,死狀恐怖我衬,靈堂內(nèi)的尸體忽然破棺而出叹放,到底是詐尸還是另有隱情,我是刑警寧澤挠羔,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布井仰,位于F島的核電站,受9級特大地震影響破加,放射性物質(zhì)發(fā)生泄漏俱恶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一范舀、第九天 我趴在偏房一處隱蔽的房頂上張望合是。 院中可真熱鬧,春花似錦锭环、人聲如沸聪全。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽难礼。三九已至,卻和暖如春汽久,著一層夾襖步出監(jiān)牢的瞬間鹤竭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工景醇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臀稚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓三痰,卻偏偏與公主長得像吧寺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子散劫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容