1. 程式人生 > >NGUI 與世界座標與螢幕座標之間的轉換的幫助類

NGUI 與世界座標與螢幕座標之間的轉換的幫助類

      在遊戲開發中,避免不了會用到座標轉化的情況,下面自己寫的幫助類方法

    public class UtilHelper : SingletonObject<UtilHelper>
{
    public Vector3 PosScreenToNgui(Vector3 screenPos)
    {
        Camera NguiCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("UI"));
        var nguiPos = NguiCamera.ScreenToWorldPoint(screenPos);
        return nguiPos;
    }
    public Vector3 PosScreenToWorld(Vector3 screenPos, float z)
    {
        Camera worldCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("Default"));
        screenPos.z = z;
        var worldPos = worldCamera.ScreenToWorldPoint(screenPos);
        return worldPos;
    }
    public Vector3 PosWorldToNgui(GameObject target)
    {
        Camera worldCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("Default"));
        Camera NguiCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("UI"));


        var screenPos = worldCamera.WorldToScreenPoint(target.transform.position);
        var nguiPos = NguiCamera.ScreenToWorldPoint(screenPos);
        nguiPos.z = 0;
        return nguiPos;
    }
    public Vector3 PosWorldToScreen(GameObject target)
    {
        Camera worldCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("Default"));
        var screenPos = worldCamera.WorldToScreenPoint(target.transform.position); screenPos.z = 0;
        return screenPos;
    }
    public Vector3 PosNguiToWorld(Vector3 target, float z)
    {
        Camera worldCamera = Camera.main;
        Camera NguiCamera = UICamera.currentCamera;


        var screenPos = NguiCamera.WorldToScreenPoint(target);
        screenPos.z = z;
        var worldPos = worldCamera.ScreenToWorldPoint(screenPos);
        return worldPos;
    }

    public void AutoFitCamera()
    {
        var camera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("UI"));
        camera.aspect = 1280f / 720f;
        Debug.Log("camera.aspect:"+camera.aspect);
    }
}