public void SelectObject(string targetObjName, bool zoomAction) { // 최 상위 객체는 선택할 수 없음.. 클릭시 큰 의미 없으며 큰 데이터일경우 매우 느릴 수 있음. if (GameObject.Find(targetObjName).transform.parent.name.Equals(CommonNames.ROOT)) { return; } // 선택된 객체의 영역을 구한다. Bounds myBounds = new Bounds(); GameObject targetObj = GameObject.Find(targetObjName); // 자식이 있다면 직계손들의 범위만 인정. if (targetObj.transform.childCount > 0) { myBounds = targetObj.transform.GetChild(0).GetComponent <MeshFilter>().mesh.bounds; for (int i = 1; i < targetObj.transform.childCount; i++) { myBounds.Encapsulate(targetObj.transform.GetChild(i).GetComponent <MeshFilter>().mesh.bounds); } } if (targetObj.transform.childCount == 0) { myBounds = targetObj.transform.GetComponent <MeshFilter>().mesh.bounds; } var frustrumLength = Math.Max(myBounds.size.y, myBounds.size.x); frustrumLength = Math.Max(frustrumLength, myBounds.size.z); var distance = frustrumLength / Mathf.Tan(Camera.main.fieldOfView * 0.5f * Mathf.Deg2Rad); var resultRot = new Vector3(45, 225, 0); var resultPos = myBounds.center - distance * (Quaternion.Euler(resultRot) * Vector3.forward); if (targetObj.tag.Equals("TAG_STATE")) { resultPos = targetObj.transform.position - mainFuncs.quickParser.GetUnitSize() * 5 * (Quaternion.Euler(resultRot) * Vector3.forward); } // 선택시 하이라이트. // 1. 기존 하이라이트 객체를 원래대로 돌린다. if (HighlightedObject != null) { Material materialOriginal = mainFuncs.GetMaterialByTag(HighlightedObject.tag); if (HighlightedObject.transform.childCount > 0) { foreach (Transform face in HighlightedObject.transform) { face.GetComponent <Renderer>().material = materialOriginal; } } else { HighlightedObject.GetComponent <Renderer>().material = materialOriginal; } } HighlightedObject = targetObj; // 2. 새로운 객체를 하이라이트화 시킨다. if (targetObj.transform.childCount > 0) { foreach (Transform face in targetObj.transform) { face.GetComponent <Renderer>().material = materialSelected; } } else { targetObj.GetComponent <Renderer>().material = materialSelected; } if (zoomAction) { Camera.main.transform.DOMove(resultPos, 1); Camera.main.transform.DORotate(resultRot, 1); } }