using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using static TMPro.SpriteAssetUtilities.TexturePacker_JsonArray; public class DragTest1 : MonoBehaviour { [Header("该物体容积层数")] public int volume; ///// ///// 锚点位置,放预制体最下面 ///// //private GameObject anchorPos; //public List listTargets = new List(); ////[HideInInspector] //public List frames = new List(); //[Header("该设备层数")] //public int PerTier = 42; //[Header("该区域设备数")] //public int PerRow = 5; //public bool isExit = false; //public bool isClicked = false; //public bool isTarget; ///// ///// 是否已经放置 ///// //public bool isplace; //public bool canPut; //bool isray = false; //bool finishPut; //private void Start() //{ // GetUList(); // canPut = true; // anchorPos = transform.Find("锚点").gameObject; // //finishPut = gameObject.GetComponent().isPut; //} //private void Update() //{ // RaycastHit hit; // if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 999, 1 << 8 | 1 << 10)) // { // isray = true; // } // else // { // isray = false; // } // if (finishPut == false) // { // if (Input.GetMouseButtonUp(0)) // { // MouseUp(); // } // } //} //IEnumerator OnMouseOver() //{ // if (isray) // { // //三维物体坐标转屏幕坐标 // Vector3 screenSpace = Camera.main.WorldToScreenPoint(anchorPos.transform.position); // //将鼠标屏幕坐标转为三维坐标,再计算物体位置与鼠标之间的距离 // var offset = anchorPos.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); // while (Input.GetMouseButton(0) && !finishPut) // { // finishPut = false; // Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); // var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; // transform.position = curPosition; // yield return null; // } // } //} //public void MouseUp() //{ // //if (isray) // { // isTarget = false; // foreach (GameObject item in listTargets) // { // if (GetOverGameObject(Camera.main.gameObject).Contains(item)) // { // //判断当前为第几个子物体 // int rank = listTargets.IndexOf(item) + 1; // //移除设备 // //if (item.transform.childCount >= 1) // //{ // // int v = item.transform.GetComponentInChildren().volume; // // for (int i = 0; i < v; i++) // // { // // listTargets[rank - 1 + i].tag = "Untagged"; // // } // // Destroy(item.transform.GetChild(0).gameObject); // // break; // //} // int isarea = 1; int isrow = 1; int istier = 0; // bool allowPut = true; // //计算层、列、区域 // for (int i = 1; i <= rank; i++) // { // if (istier < PerTier) // { // istier++; // } // else // { // if (isrow < PerRow) // { // isrow++; // } // else // { // isarea++; // isrow = 1; // } // istier = 1; // } // } // //剩下预留层数 // int lower = 0; // lower = PerTier - istier + 1; // if (lower >= volume) // { // for (int i = 0; i < volume; i++) // { // if (listTargets[rank - 1 + i].CompareTag("Isput")) // { // allowPut = false; // Debug.Log("预留空间不足,不能放置该设备"); // break; // } // } // if (allowPut) // { // ////设备第几个区域 // //gameObject.GetComponent().mydata.area = isarea.ToString(); // ////设备第几列 // //gameObject.GetComponent().mydata.row = isrow.ToString(); // ////设备第几层 // //gameObject.GetComponent().mydata.tier = istier.ToString(); // Debug.Log("该设备容积为:" + volume); // Debug.Log("第" + isarea + "区,第" + isrow + "台,第" + istier + "层"); // transform.position = item.transform.position; // Collider collider = item.GetComponent(); // //放到锚点位置 // transform.position = new Vector3(anchorPos.transform.position.x, anchorPos.transform.position.y + collider.bounds.size.y / 2, anchorPos.transform.position.z); // //设置父物体 // transform.SetParent(item.transform, true); // //给使用的格子打上标签 // for (int i = 0; i < volume; i++) // { // listTargets[rank - 1 + i].tag = "Isput"; // } // finishPut = true; // isTarget = true; // isplace = true; // } // } // else // { // Debug.Log("预留空间不足,不能放置该设备"); // } // } // } // if (isplace == false) // { // Destroy(gameObject); // } // else if (!isTarget && !isplace) // { // Destroy(gameObject); // } // } //} ////获取光标停留的3D物体 //public List GetOverGameObject(GameObject raycaster) //{ // PointerEventData pointerEventData = new PointerEventData(EventSystem.current); // pointerEventData.position = Input.mousePosition; // PhysicsRaycaster pr = raycaster.GetComponent(); // List results = new List(); // pr.Raycast(pointerEventData, results); // List listObjs = new List(); // if (results.Count != 0) // { // foreach (RaycastResult item in results) // { // //if (item.gameObject.layer != 7) // //位子物体layer层要为6 // //if (item.gameObject.layer != 8) break; // listObjs.Add(item.gameObject); // } // } // return listObjs; //} ///// ///// 得到U位数量 ///// //public void GetUList() //{ // for (int i = 0; i < frames.Count; i++) // { // for (int j = 0; j < PerTier; j++) // { // listTargets.Add(frames[i].transform.GetChild(j).gameObject); // } // } //} }