unity3d基础学习 世界坐标 本地坐标

转载 2018年04月15日 22:51:45

1,World Space(世界坐标):

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

2,Screen Space(屏幕坐标):

以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。

注:鼠标位置坐标属于屏幕坐标:

  • Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,
  • Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。
  • ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

3,绘制GUI

界面的坐标系:

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

世界坐标→屏幕坐标:

camera.WorldToScreenPoint(transform.position);

这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。

屏幕坐标→视口坐标:

camera.ScreenToViewportPoint(Input.GetTouch(0).position);

这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。

视口坐标→屏幕坐标:

camera.ViewportToScreenPoint();

视口坐标→世界坐标:

camera.ViewportToWorldPoint();

案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。

[AppleScript] 纯文本查看 复制代码
usingUnityEngine;
usingSystem.Collections;
public classtest : MonoBehaviour {
//图片
public Textureimg;
//储存鼠标的位置坐标
private Vector2pos;
void OnGUI()
{
//鼠标左击,获取当前鼠标的位置
if(Input.GetMouseButton(0))
{
pos =Input.mousePosition;
}
//绘制图片
GUI.DrawTexture(newRect(pos.x,Screen.height - pos.y,100,100), img);
}
}

案例2——坐标显示和坐标转换(这个是触摸方面的。如果没有触摸屏,那就将那个if去掉吧!)

[AppleScript] 纯文本查看 复制代码
usingUnityEngine;
usingSystem.Collections;
public classtest: MonoBehaviour {
//场景的相机,拖放进来
public Cameracamera;
//场景的物体
privateGameObject obj;
void Start()
{
//初始化
obj =GameObject.Find("Plane");
}
void Update ()
{
//有触摸
if(Input.touchCount > 0)
{
print("世界坐标" + obj.transform.position);
print("屏幕坐标" + Input.GetTouch(0).position);
print("世界坐标→屏幕坐标" + camera.WorldToScreenPoint(obj.transform.position));
print("屏幕坐标→视口坐标" + camera.ScreenToViewportPoint(Input.GetTouch(0).position));
print("世界坐标→视口坐标" + camera.WorldToViewportPoint(obj.transform.position));
}
}
}

通过添加collider可以获得物体大小


Unity世界坐标与本地坐标的一种转换方法

Unity有世界坐标、本地坐标(localposition)、UI坐标(这个我好像还没怎么用)、屏幕坐标等等,之前的一个项目需要考虑世界坐标转换为本地坐标,后来经过一番尝试,找到了一种比较取巧的方法。...
  • li727507857
  • li727507857
  • 2017-04-26 15:11:26
  • 12099

Unity学习笔记(1)—本地坐标转世界坐标

Unity学习笔记(1)—本地坐标转世界坐标先简单介绍一下我是一个程序员(菜鸟程序员),用C#开发,在开发的过程中会遇到一些问题,当时解决了但是在遇到可能还会在犯,所以启发我做这样一个学习笔记系列,一...
  • u011080048
  • u011080048
  • 2016-10-23 20:34:50
  • 8627

unity中世界坐标和绝对坐标之间的转换

public class TEST : MonoBehaviour { void Start () { Debug.Log(transform.p...
  • liudavi
  • liudavi
  • 2015-12-22 11:50:04
  • 7247

unity中世界坐标与局部坐标

本人学生一枚,刚接触unity3D,若有理解得不对的地方,还望各路大神不吝赐教~        unity中的坐标系统包括世界坐标(World Space),屏幕坐标(Screen Space),视口...
  • u013477973
  • u013477973
  • 2015-10-31 12:10:17
  • 7953

关于世界和局部坐标转换

Vector3.up指的是世界坐标中的”上方向”,即(0,1,0)transform.up指的是当前物体的”上方向” 在世界坐标中的表示transform.TransformDirection(Vec...
  • inlet511
  • inlet511
  • 2015-07-10 13:44:50
  • 4166

【Unity3D】世界坐标与屏幕坐标

Unity3D由于是在三维世界中编程,而最终的结果是需要反馈到肉眼所示的2D屏幕之上的。这就产生了一种比较需要考虑的问题,尤其在一些涉及屏幕与Unity3D的3D世界交互的情况。网络上对于这方面的文字...
  • yongh701
  • yongh701
  • 2017-05-08 17:42:02
  • 7574

世界坐标转到UGUI坐标

UGUI坐标系转换
  • zhuangyou123
  • zhuangyou123
  • 2016-05-26 11:06:37
  • 4059

unity 3D中关于世界坐标和局部坐标的区别

最近在研究hololens的“gaze”(注视)这个功能的过程中,使用了unity 3D进行了场景的构建,如下图所示: “注视”过程就是设置一个标记点对看到上述脊柱和球体进行碰撞标记的过程,...
  • pouline_
  • pouline_
  • 2017-03-17 09:43:33
  • 703

Unity 世界坐标和局部坐标

Unity 分为世界坐标和局部坐标。局部坐标是相对于父亲来说的,而世界坐标是对于整个游戏来说的。 绝对坐标:PickUps的坐标为世界坐标(绝对坐标) 相对坐标:每一个PickUp都有一个坐标,这...
  • weixin_36792038
  • weixin_36792038
  • 2016-11-27 21:28:39
  • 3173

cocos2d学习---世界坐标和本地坐标的转化

最近做东西遇到的小问题,之前没怎么看过,就今天特地拿出来写个demo,记住这个问题。一、笛卡儿坐标系OpenGl坐标系为笛卡儿右手系。x向右,y向上,z向外。 我之前开发的是android坐标系为屏...
  • li15225271052
  • li15225271052
  • 2017-08-27 21:06:30
  • 1232
收藏助手
不良信息举报
您举报文章:unity3d基础学习 世界坐标 本地坐标
举报原因:
原因补充:

(最多只允许输入30个字)