using System.Collections; using System.Collections.Generic; using Unity.Burst.CompilerServices; using UnityEngine; //测量距离 public class RangeFinding : MonoBehaviour { //总控制 public bool isClbool; private Vector3 posOne, posTwo; //测量控制 public bool isOpenDistance; private int distanceInt; //计数控制 public Transform prefabTransform; //测量的预制体 private Transform myDistanceObj; public Transform allCLParentTransform; //所有预制体生成的父节点 protected SorghumController Sorg_posOne; protected SorghumController Sorg_posTwo; // Start is called before the first frame update void Start() { } private void OnDisable() { while (allCLParentTransform.childCount > 0) { DestroyImmediate(allCLParentTransform.GetChild(0).gameObject); } } // Update is called once per frame void Update() { if (isClbool) { try { if (Input.GetMouseButtonDown(0)) { Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit1; if (Physics.Raycast(ray1, out hit1, 1000)) { if (hit1.collider.gameObject.GetComponent() == null) return; posOne = Input.mousePosition; } else { return; } } Ray ray2 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit2; //距离 if (isOpenDistance) { if (Input.GetMouseButtonUp(0)) { posTwo = Input.mousePosition; if (Physics.Raycast(ray2, out hit2, 1000)) { if (hit2.collider.gameObject.GetComponent() == null) return; if (distanceInt == 0) { if (allCLParentTransform.childCount > 0) { while (allCLParentTransform.childCount > 0) { DestroyImmediate(allCLParentTransform.GetChild(0).gameObject); } Sorg_posOne = null; Sorg_posTwo = null; } Sorg_posOne = hit2.collider.gameObject.GetComponent(); distanceInt++; //鼠标点击克隆物体 myDistanceObj = Instantiate(prefabTransform, allCLParentTransform); // transform.TransformPoint(Prefab,hit.poit, Quaternion.identity); myDistanceObj.transform.GetChild(0).position = hit2.point; } else { Sorg_posTwo = hit2.collider.gameObject.GetComponent(); if (Sorg_posOne == Sorg_posTwo) { Transform low_P = Sorg_posOne.transform.Find("高粱/lowPoint"); Transform high_P = Sorg_posOne.transform.Find("高粱/highPoint"); myDistanceObj.transform.GetChild(0).position = low_P.position; myDistanceObj.transform.GetChild(1).position = high_P.position; } else { Transform low_P = Sorg_posTwo.transform.Find("高粱/highPoint"); Transform high_P = Sorg_posOne.transform.Find("高粱/highPoint"); myDistanceObj.transform.GetChild(0).position = low_P.position; myDistanceObj.transform.GetChild(1).position = high_P.position; } //isOpenJL = false; distanceInt = 0; } } else { return ; } } if (distanceInt > 0) { if (Physics.Raycast(ray2, out hit2, 1000)) { myDistanceObj.transform.GetChild(1).position = hit2.point; } } } } catch (System.Exception e) { Debug.LogException(e); } } } }