首页 > Unity3D频道 > 【Unity2D研究院之游戏开发】 > Unity2D研究院之精灵Sprite与屏幕之间的关系(二)
2014
10-15

Unity2D研究院之精灵Sprite与屏幕之间的关系(二)

继续学习一下unity2d,上一篇说了怎么自动生成Unity的Sprite动画。有朋友在下面给我留言说,怎么设置锚点?其实很简单。如下图所示,选择精灵然后在右边设置 pivot 就可以了。这里我设置的是左下角对齐。

Unity2D研究院之精灵Sprite与屏幕之间的关系(二) - 雨松MOMO程序研究院 - 1

 

Unity2D研究院之自动生成动画、AnimationController、Prefab(一)

锚点这东西挺怀念的,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。

Unity2D研究院之精灵Sprite与屏幕之间的关系(二) - 雨松MOMO程序研究院 - 2

 

这时选择你的摄像机。如下图所示,把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来实现的了。

Unity2D研究院之精灵Sprite与屏幕之间的关系(二) - 雨松MOMO程序研究院 - 3

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

如下图所示,小鱼会跟着我的鼠标同时移动。

Unity2D研究院之精灵Sprite与屏幕之间的关系(二) - 雨松MOMO程序研究院 - 4

 

今天就到这里,感谢大家阅读,嘿嘿。如果有意见或者建议的换欢迎在下面留言,大家一起探讨unity2d开发。 希望unity4.6早日正式版发布呀,呼呼~~~

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity2D研究院之精灵Sprite与屏幕之间的关系(二)》有 12 条评论

  1. 阿伦 说:

    太感谢了。找到转换正确摄像机SIZE的方法!

  2. 雪焰 说:

    为什么我直接这样:transform.position = postions;才是鼠标跟随的效果?莫非是因为我的是U3D 5.0?

  3. 暗夜星辰 说:

    再次打扰兄台了,我问的问题可能比较幼稚,还请兄台见谅。是这样的,小弟以前用传统编码(DirectX)方式做过几个2D小游戏,一直都对做2D游戏很有执念,现在面对现实,仔细看了些时间的Unity,发现对于2D游戏来说,Unity太过于重量级,简单的东西好像弄得复杂了,小弟还是对于纯粹编码的方式来实现2D游戏比较容易理解,看了Unity很久总是进入不了状态。因此我想请问的是如何用编码的方式来实现图片的Alpha Add混合,例如伪代码:void OnGUI(){ GUI.drawTexture(Picture1, 0, 0, 800, 600); //底层图片 //然后这里要怎样设置才能把绘图方式设置为Alpha Add?就好像OpenGL的setAlphaBlend(Add)一样 //让下面显示的图片都Alpha Add. GUI.drawTexture(…….); GUI.drawTexute(……..);}然后就是图片是不确定的,需要游戏运行时从资源包中实时读取。

  4. 暗夜星辰 说:

    请问大神如何实现Alpha Add混合效果?

  5. Maru 说:

    怎么将sprite平铺显示。UI有Tiled选项。SpriteRender没有。有什么好方法吗?

  6. miles 说:

    z軸的問題。

  7. 简单 说:

    camhalfheight和camhalfwidth貌似没用到……只是用了unity提供了这个方法screentoworldpoint去转换下而已!

留下一个回复

你的email不会被公开。