using System; using System.Collections.Generic; using UnityEngine; public class PointManagerView : MonoBehaviour { [SerializeField] private GameObject pointPrefab; private List activePoints = new List(); public Transform robotBaseTransform; // ·Îº¿ÁÂÇ¥ÀÇ ±âÁØÀÌ µÇ´Â Ãà À§Ä¡ [SerializeField] public GameObject movingAlert; [SerializeField] [Tooltip("¹ÝÅõ¸í ·Îº¿ ¸ðµ¨ÀÇ IK")] public HybridInverseKinematicsNode kinematicsNode; void Start() { movingAlert.SetActive(false); } private Vector3 ConvertRobotDataToVector3(RobotData pose) { float x = Convert.ToSingle(pose.x / -1000.0); // Robot X(mm) -> Unity X(m) float y = Convert.ToSingle(pose.z / 1000.0); // Robot Z(mm) -> Unity Y(m) float z = Convert.ToSingle(pose.y / -1000.0); // Robot Y(mm) -> Unity Z(m) return new Vector3(x, y, z); } private Quaternion ConvertRobotDataToQuaternion(RobotData pose) { float rx = pose.rx; float ry = pose.z; float rz = pose.y; return Quaternion.Euler(pose.rx, -pose.rz, pose.ry); } public void CreatePoint(RobotData pose, int index) { if(pointPrefab == null) { Debug.Log("¸¶Ä¿ ÇÁ¸®ÆÕÀÌ ÇÒ´çµÇÁö ¾Ê¾Ò½À´Ï´Ù."); return; } Vector3 position = ConvertRobotDataToVector3(pose); //Quaternion localRot = ConvertRobotDataToQuaternion(pose); //Vector3 toolOffset = new Vector3(0.681004044f, -0.221942063f, -0.447616011f); //Vector3 rotatedOffset = localRot * toolOffset; //Vector3 finalLocalPos = localPos + rotatedOffset; //Vector3 worldPos = localPos; ////Quaternion worldRot = localRot; //// ·Îº¿ Base°¡ ÀÖ´Ù¸é, ·ÎÄà ÁÂÇ¥¸¦ ¿ùµå ÁÂÇ¥·Î º¯È¯ //if (robotBaseTransform != null) //{ // worldPos = robotBaseTransform.TransformPoint(localPos); // //worldRot = robotBaseTransform.rotation * localRot; //} //else //{ // Debug.LogWarning("PointManagerView: RobotBaseTransformÀÌ ÇÒ´çµÇÁö ¾Ê¾Æ ¿ùµå ¿øÁ¡ ±âÁØÀ¸·Î »ý¼ºµË´Ï´Ù."); //} // º¯È¯µÈ ¿ùµå ÁÂÇ¥¿¡ »ý¼º GameObject pointObj = Instantiate(pointPrefab, position, Quaternion.identity, this.transform); Debug.Log($"¸¶Ä¿ ÇÁ¸®ÆÕ »ý¼ºµÊ, À§Ä¡: {position}"); Debug.Log($"·Îº¿ ±âÁØÁ¡(root ÁÂÇ¥): {robotBaseTransform.position}"); //pointObj.transform.localRotation = Quaternion.identity; activePoints.Add(pointObj); RobotPoint pointComponent = pointObj.GetComponent(); if (pointComponent != null) { pointComponent.pointIndex = activePoints.Count - 1; } else { Debug.LogError("pointÇÁ¸®ÆÕ¿¡ RobotPoint½ºÅ©¸³Æ®°¡ ¾øÀ½"); } } public void UpdatePointPosition(int index, Vector3 pose) { if (index < 0 || index >= activePoints.Count) return; activePoints[index].transform.position = pose; } public void DeletePoint(int index) { if (index < 0 || index >= activePoints.Count) return; Destroy(activePoints[index]); activePoints.RemoveAt(index); } public void RedrawPoints(List poses) { foreach (var point in activePoints) Destroy(point); activePoints.Clear(); if (poses == null) return; for (int i= 0; i < poses.Count; i++) CreatePoint(poses[i], i); } }