世界坐标 和 本地UI 坐标之间的转换


 local worldCamera = CS.FindChild(self.gerScene, 'Camera'):GetComponent("Camera")  --世界摄像机

 local uicamera =  GameObject.Find("UI Root/Camera"):GetComponent("Camera")     --UI摄像机
 local pos = worldCamera:WorldToScreenPoint(self.shadows[i].transform.position);  --获取目标物体的屏幕坐标
 pos = uicamera:ScreenToWorldPoint(pos);  --将屏幕坐标转换为UI的世界坐标
 pos.z = 0;                  --由于NGUI 2D界面的Z轴都为0,这里我们将坐标修改为0.只取其X,Y坐标。
 self._CaptainMark.position = Vector3(pos.x,pos.y,pos.z);  --将修改过的坐标赋给UI界面


Vector3 pos = uicamera.WorldToScreenPoint(obj.transform.position);         //获取UI界面的屏幕坐标
pos.z = 1f;  //设置为零时转换后的pos全为0,屏幕空间的原因,被坑过的我提醒大家,切记要改!
pos = worldCamera.ScreenToWorldPoint(pos);                              //将屏幕坐标转换为世界坐标
pos.y = 0f;

targetObject.transform.position = new Vector3(pos.x, pos.y, pos.z);      //将修改过的坐标赋给目标物体坐标


一个物体改变了父物体 设置他的位置, 世界坐标 position 是不回改变 所以在实例化之前记住他的世界坐标

然后先设置父物体和缩放 和本地坐标 最后设置世界坐标

   local pos = preItem.transform.position
        local item = CS.NewObject(self._preItem)
        local itemTra = item.transform
        itemTra.parent = widget_Target.transform
        itemTra.localScale = Vector3.one
        itemTra.localPosition = Vector3.zero;
        itemTra.position = pos

猜你喜欢

转载自blog.csdn.net/qq_30585525/article/details/80846645