Sprite与屏幕之间的关系

 

锚点这东西挺怀念的,N年前我在做J2ME手游的时候。屏幕整体的坐标是左上角是00点。X轴向右递增,Y轴向下递增。所有的image也是这个原理。只是unity的触摸屏坐标不是左上角,而是左下角。 所以这里我把精灵的锚点也设置成了左下角,注意上图中的pixels to units 请设置成100。

触摸屏坐标:就是用Input.mousePosition 获取用户触摸屏幕手指 或者 鼠标的位置。

实际坐标:unity的实际坐标是笛卡尔坐标系,00点是在正中心,X轴向右是正,向左是负。Y轴向上是正,向下是负。

这样问题也就来了,我怎么把触摸屏的坐标换算到实际坐标系上?解决这个问题之前我们要先解决一个更重要的问题–摄像机的参数。

我开发时的分辨率设置成宽960高640.如下图所示,在Game视图下面,我选择了960X640的分辨率,下面提示的 using reslution 717×478 是因为此时Game视图的比960X640小,所以这里等比例缩小了一点所以是 717X478。

这时选择你的摄像机。如下图所示,把Projection改成Orthographic 也就是正交摄像机。 然后要说的就是size = 3.2。这个3.2是怎么来的呢?想想我们的分辨率的高是多少?高是640.  640/2/100 = 3.2. 除以2就是屏幕高的一半,除以100就是上面我们设置的 pixels to units =100 . 再举个例子如果你开发时的分辨率是1280X720 那么此时你的高就是720了。 720/2/100 = 3.6 那么此时摄像机的size 就应该写成3.6了。。 再唠叨一句,手游的分辨率自适应基本都是这样修改摄像机的size来实现的了。

 摄像机的参数搞清楚了,我们在来看看之前提出的问题?我怎么把触摸屏的坐标换算到实际坐标系上? 把如下代码挂在一个Sprite对象上。

 1 using UnityEngine;
 2 using System.Collections;
 3  
 4 public class FishCommon : MonoBehaviour {
 5  
 6     private float camHalfHeight;
 7     private float camHalfWidth; 
 8  
 9     void Awake()
10     {
11         this.camHalfHeight = Camera.main.orthographicSize;
12         this.camHalfWidth = Camera.main.aspect * camHalfHeight; 
13     }
14  
15     void Update () {
16         //手指 或者 鼠标的坐标传进去
17         Move(Input.mousePosition);
18     }
19  
20     public void Move(Vector2 postions){
21         Move(new Vector3(postions.x,postions.y,0));
22     }
23     public void Move(Vector3 postions){
24         //在这里进行坐标的换算
25         transform.position =    ScreenToWorld(postions);
26     }
27  
28     private Vector3 ScreenToWorld(Vector3 postion){
29  
30         return     Camera.main.ScreenToWorldPoint(postion);
31     }
32 }

转载自:http://www.xuanyusong.com/archives/3254

posted @ 2017-05-16 19:42  AaronBlogs  阅读(423)  评论(0编辑  收藏  举报