zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Linux makefile 教程 非常详细,且易懂
    PCRE函数简介和使用示例
    Eclipse常用快捷键汇总
    vc6.0 调用ocx控件
    理解串口流控
    c++ xml markup
    unresolved external symbol __endthreadex错误解决(
    Android自动化~1
    数据库左连接,右连接,内连接,外连接
    Linux常用指令
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6863289.html
Copyright © 2011-2022 走看看