Unity3D-相机和手机屏幕之间的关系,Sprite锚点

2D锚点

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

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

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);
	}
}

如下图所示,小鱼会跟着我的鼠标同时移动。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40985921/article/details/89387170
今日推荐