zoukankan      html  css  js  c++  java
  • Unity坐标系统

    Unity使用了几种不同的坐标系统,分别如下:

    1.屏幕坐标(Screen Space):屏幕坐标是以像素来定义的,以屏幕左下角为(0, 0)点,右上角为(Screen.width, Screen.height)点。如下图所示:

    Screen Space.png

    当你用点击手机屏幕时,你会得到一个屏幕坐标(x, y),注意,屏幕坐标只有x和y两个维度。Vector2 pos = Input.GetTouch(0).position;可以获得单个手指触摸的屏幕坐标。

    2.绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

    GUI Space.png

    3.世界坐标(World Space):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。

    World世界坐标:从前视图front看:
    ·X轴正方向指向(屏幕)右侧。
    ·Z轴正方向指向(屏幕)上方。
    ·Y轴正方向背离你。

    1. position是根据世界原点为中心

    2. localPosition是根据父节点为中心,如果没有父节点,localpositon和position是没有区别的

    3.选中一个物体左上角Global和Local切换看物体世界坐标轴和本地坐标轴

     
    4.视口坐标(View Port Space): 视口坐标是相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

    View视图坐标:在默认坐标系下,在所有的(正交)视图中X,Y,Z三个轴是相同的。当你使用这个坐标系移动一个对象时,你所移动的对象与视口空间有如下关系。
    ·X轴总是指向(屏幕)右侧。
    ·Y轴总是指向(屏幕)上方。
    ·Z轴总是垂直屏幕指向你。

    • 世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。

    • 屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。

    • 视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

    •视口坐标→世界坐标:camera.ViewportToWorldPoint();

    http://answers.unity3d.com/questions/256817/about-world-space-and-local-space.html
    http://www.cnblogs.com/martianzone/p/3371789.htm

    5. unity2d坐标 笛卡尔坐标系,00点是在正中心,X轴向右是正,向左是负。Y轴向上是正,向下是负。

    using UnityEngine;
    using System.Collections;

    public class FishCommon : MonoBehaviour {

    private float camHalfHeight;
    private float camHalfWidth;

    void Awake()
    {
    this.camHalfHeight = Camera.main.orthographicSize;
    this.camHalfWidth = Camera.main.aspect * camHalfHeight;
    }

    void Update () {
    //手指 或者 鼠标的坐标传进去
    Move(Input.mousePosition);
    }

    public void Move(Vector2 postions){
    Move(new Vector3(postions.x,postions.y,0));
    }
    public void Move(Vector3 postions){
    //在这里进行坐标的换算
    transform.position = ScreenToWorld(postions);
    }

    private Vector3 ScreenToWorld(Vector3 postion){

    return Camera.main.ScreenToWorldPoint(postion);
    }
    }

  • 相关阅读:
    设计模式之备忘录模式
    特殊传参方式
    页面响应效率测试
    composer安装的包git无法提交的解决办法是因为安装的时候生成了.git隐藏文件
    数据结构和算法深入浅出理解
    中缀表达式转换为后缀表达式
    p2p技术
    【自动化测试】WebDriver使用
    pt-query-digest简介使用
    mac编译openJDK8
  • 原文地址:https://www.cnblogs.com/kanekiken/p/7533529.html
Copyright © 2011-2022 走看看