继续学习一下unity2d,上一篇说了怎么自动生成Unity的Sprite动画。有朋友在下面给我留言说,怎么设置锚点?其实很简单。如下图所示,选择精灵然后在右边设置 pivot 就可以了。这里我设置的是左下角对齐。
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。
这时选择你的摄像机。如下图所示,把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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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); } } |
如下图所示,小鱼会跟着我的鼠标同时移动。
今天就到这里,感谢大家阅读,嘿嘿。如果有意见或者建议的换欢迎在下面留言,大家一起探讨unity2d开发。 希望unity4.6早日正式版发布呀,呼呼~~~
- 本文固定链接: https://www.xuanyusong.com/archives/3254
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
太感谢了。找到转换正确摄像机SIZE的方法!
为什么我直接这样:transform.position = postions;才是鼠标跟随的效果?莫非是因为我的是U3D 5.0?
再次打扰兄台了,我问的问题可能比较幼稚,还请兄台见谅。是这样的,小弟以前用传统编码(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(……..);}然后就是图片是不确定的,需要游戏运行时从资源包中实时读取。
GUI 。。。。 这个我也不知道,没这么做过。。。
请问大神如何实现Alpha Add混合效果?
粒子特效上不就有这种shader么。
怎么将sprite平铺显示。UI有Tiled选项。SpriteRender没有。有什么好方法吗?
http://schemingdeveloper.com/2014/10/15/tiling-sprites-unity/ 这里
z軸的問題。
camhalfheight和camhalfwidth貌似没用到……只是用了unity提供了这个方法screentoworldpoint去转换下而已!
有点连带性的代码 我忘删除了 呵呵。。