unity 2d 与3d坐标互相转换

// 根据3d的主角坐标,获得主角血条的坐标 (通过视窗坐标转换)

 Vector3 pos = cam.WorldToViewportPoint(Boy.position); // 将主角的3d坐标转换成对象屏幕的视窗坐标
 UI.transform.position = UIcam.ViewportToWorldPoint(pos); // 根据视窗坐标获得UI血条在3d的位置

// 根据3d的主角坐标,获得主角血条的坐标 (通过屏幕坐标转换)

screenpos = _cameraScene.WorldToScreenPoint (target);
        viewpos = _cameraUI.ScreenToWorldPoint (new Vector3 (screenpos.x,screenpos.y,_cameraUI.nearClipPlane));
        viewpos.z = 0;
// 通过2d的坐标加上z轴的深度,获得该2d坐标在3d上的位置
    public static Vector3 PointVec2ToVec3(Vector2 vec2, float z){
        Vector3 world = new Vector3 (vec2.x / Screen.width, vec2.y / Screen.height, z);
        Vector3 world1 = Camera.main.ViewportToWorldPoint (new Vector3(world.x, world.y, world.z)); // 屏幕坐标转换成场景坐标
        return world1;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity3d是一款常用的游戏引擎,而GPS经纬度与空间坐标在游戏开发中也经常被使用。Unity3d中提供了方法完成经纬度和空间坐标转换。 在Unity3d中,使用LocationService类获取GPS经纬度信息,获取到的经纬度信息为WGS84坐标系下的经纬度。而Unity3d中的坐标系是以Vector3三维向量形式存在,需要将WGS84坐标系下的经纬度转换Unity3d中的坐标系。 可以使用以下方法将经纬度转换Unity3d中的坐标系: 1. 使用WGS84坐标系下的经纬度计算出该点在地球球面上的X、Y、Z坐标。 2. 使用转化矩阵将地球球面坐标系下的X、Y、Z转换Unity3d中的坐标系。 以下是代码示例: ```csharp using UnityEngine; using System; public class GPSToUnity : MonoBehaviour { // 地球平均半径 private const double EarthRadius = 6378137.0; // 转化矩阵 private static readonly Matrix4x4 wgs84ToUnity = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); // 将GPS经纬度转换Unity3d中的坐标系 public static Vector3 GPSToUnityCoord(double longitude, double latitude) { double lonRad = longitude * (Math.PI / 180.0); double latRad = latitude * (Math.PI / 180.0); double x = EarthRadius * Math.Cos(latRad) * Math.Cos(lonRad); double z = EarthRadius * Math.Cos(latRad) * Math.Sin(lonRad); double y = EarthRadius * Math.Sin(latRad); Vector3 coord = wgs84ToUnity.MultiplyPoint3x4(new Vector3((float)x, (float)y, (float)z)); return coord; } } ``` 以上方法是将经纬度转换Unity3d中的坐标系,也可以使用相反的方法将Unity3d中的坐标转换为经纬度。需要注意的是,在坐标转换中,我们一般使用的WGS84坐标系转化矩阵并不适用于所有情况,可能会存在一定误差。因此在使用中需要根据实际情况选择正确的转换方法,减少误差。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strivero

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值