unity 如何实现终极屏幕旋转破解版6.0坐

游戏蛮牛学习群(纯技术交流,不闲聊):
扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 10389|回复: 2
unity 2d 四大坐标系问题 鼠标点击位置问题 详细入门解析
本帖为抢楼帖,欢迎抢楼!&
72779/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 2779, 距离下一级还需 2221 积分
日久生情, 积分 2779, 距离下一级还需 2221 积分
蛮牛币2976
在线时间330 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
首先,unity中的camera有四大坐标系你需要了解清楚:
官方对unity camera的描述:
Description
A Camera is a device through which the player views the world.
A screen space point is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (,). The z position is in world units from the camera.A viewport space point is normalized and relative to the camera. The bottom-left of the camera is (0,0); the top-right is (1,1). The z position is in world units from the camera.A world space point is defined in global coordinates (eg. Transform.position).
摄像机是玩家观看世界的入口。
屏幕空间:以像素为单位,屏幕的左下为(0,0);右上是(PixelWidth,pixelHeight),z轴的值与camera相同。注意:鼠标位置坐标属于屏幕坐标,但Input.mousePosition获得的位置坐标是世界坐标,z轴值为0,需要转换,见下文。
视口空间:与camera相关的归一化坐标,相机的左下角为(0,0)点,右上角为(1,1)点,z轴的值与camera相同。(用的不多
世界空间:普遍坐标系,是场景中物体的3D实际位置。注意:transform.position 的值默认是代码所贴附的物体的位置。
第四个坐标系是 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
他们之间有转换关系,如下:
世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。视口坐标→屏幕坐标:camera.ViewportToScreenPoint();视口坐标→世界坐标:camera.ViewportToWorldPoint();
转换函数一共六种,详见下面的测试代码:
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
print(&Input.mousePosition: & + Input.mousePosition );
print(&Input.mousePosition world to viewport: & + Camera.main.WorldToViewportPoint(Input.mousePosition ));
print(&Input.mousePosition world to screen: & + Camera.main.WorldToScreenPoint(Input.mousePosition));
print(&Input.mousePosition Viewport To Screen: & + Camera.main.ViewportToScreenPoint(Input.mousePosition ));
print(&Input.mousePosition Viewport To World: & + Camera.main.ViewportToWorldPoint(Input.mousePosition));
print(&Input.mousePosition Screen To Viewport & + Camera.main.ScreenToViewportPoint(Input.mousePosition ));
print(&Input.mousePosition Screen To World: & + Camera.main.ScreenToWorldPoint(Input.mousePosition));
print(&-------------------& );
可以用以上代码来了解这些坐标系的区别
下面介绍 unity2d 如何获取鼠标位置/如何实现点击哪里就在哪里生成一个新物体/过去点击位置/点击位置转换
获取鼠标位置,放置新物体:
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
void Update () {
screenPosition = Camera.main.WorldToScreenPoint(transform.position);
mousePositionOnScreen = Input.mouseP
mousePositionOnScreen.z = screenPosition.z;
mousePositionInWorld =
Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
if (Input .GetMouseButtonDown(0)) {
Instantiate (Soldier, mousePositionInWorld , Quaternion.identity);
1、在默认写好的Update函数中,先获取相机的z轴位置,(由于我们是2d界面,可能玩法跟3d编程有所出入)
2、是我代码所依附的空物体的位置,无所谓在哪,用了WorldToScreenPoint函数之后它的z轴值变为跟camera一样,我们只用z轴的值;
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
transform.position
3、虽然属于屏幕坐标,但它的z轴值不是屏幕坐标系的z轴值,所以我们用来把刚刚取到的camera z轴坐标值赋给鼠标点击坐标,只有这时的值才是真正你在屏幕点击的位置,可以想像,触摸位置是屏幕,所以我们获取的点击位置只有在屏幕坐标下才是有效的,这一步就将世界坐标下的mousePosition转化到了屏幕坐标下;
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
mousePositionOnScreen.z = screenPosition.z;
4、由于生成新的物体,位置一定是世界坐标系下的才有利于游戏开发,因为标准相同,普遍适用,所以我们放置新的物体也要将物体坐标转化为世界坐标,即
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
mousePositionInWorld =
Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
这样得到了鼠标点击位置在世界坐标系下的坐标,由于是2d游戏,我们不涉及射线定位了,放置新物体也统一默认放置在世界坐标x-y平面,z轴值为0;
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
Input .GetMouseButtonDown(0)
感知鼠标点击,触发条件;6、
[JavaScript] 纯文本查看 复制代码[csharp] view plaincopyprint?
Instantiate (Soldier, mousePositionInWorld , Quaternion.identity);
生成新物体。
获取鼠标点击的物体的位置信息;unity 获得鼠标点击的位置;unity 鼠标屏幕坐标;unity 鼠标点击 在屏幕上生成;unity坐标系;unity点击;unity鼠标;unity3d 射线绘制;unity 2d 射线;unity射线坐标;unity如何测试触摸;unity中的坐标系;unity点击移动;unity 鼠标按下;unity鼠标移动;unity3d 绘制射线;unity 2d射线怎么用;unity 坐标射线;unity 触摸 测试;unity 测试触摸
每日推荐:
113/50主题帖子积分
注册看看, 积分 13, 距离下一级还需 37 积分
注册看看, 积分 13, 距离下一级还需 37 积分
在线时间3 小时
本帖最后由 yanzhanyi123 于
09:59 编辑
您好,上面这篇文章是本人原创,请在标题注明转载,请在文章首段加入“转载自http://blog.csdn.net/yanzhanyi/article/details/ ”
每日推荐:
61281/1500排名<font color="#FF昨日变化主题帖子积分
蛮牛粉丝, 积分 1281, 距离下一级还需 219 积分
蛮牛粉丝, 积分 1281, 距离下一级还需 219 积分
在线时间265 小时
我想问下,当在用NGUI的时候,如何将鼠标点击得到的位置,设置成NGUI中一个label的位置呢,看到希望能够回复,谢谢
每日推荐:获取屏幕像素点的世界坐标
最近要实现一个功能,获取屏幕上看到的每一个像素点对应的&世界坐标&。也知道有可以利用下面这个函数:
& & & &Vector3 p = camera.ScreenToWorldPoint(new Vector3(0, 0, 0.28F));
&
但是问题是这个函数需要利用到每个像素点对应的深度值。
我也写了shader试图获取深度值,但是因为shader回传的是color,会直接显示在texture里面,所以不知道在脚本里如何获取到每个像素点的深度值,脚本里的代码如下:
& & & &// Read screen contents into the texture
& & & & &tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
& & & & &tex.Apply();
& & & &// Encode texture into PNG
& & & & &byte[] pngBytes = tex.EncodeToPNG();
这个byte[]格式的pngBytes,我不知道如何利用,里面有每个像素点depth的信息。如果能拿到depth信息,我就可以利用ScreenToWorldPoint的函数进行运算了。
希望可以得到指点,多谢大家!
要评论请先&或者&想问问Unity怎么做屏幕适配呢【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:88,388贴子:
想问问Unity怎么做屏幕适配呢收藏
比如像720,1080P的屏幕摄像机该怎么设置呢
来这里在线学习Unity!
我做了一个宽屏的游戏,部署到手机上十横屏显示
求明白的指点指点啊
登录百度帐号&鍔犺浇涓

我要回帖

更多关于 免root屏幕自动点击器 的文章

 

随机推荐