我想活得高德地图坐标偏移移值,现在我有每次点击的坐标,怎样得到过去点击的坐标

扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 9622|回复: 2
unity 2d 四大坐标系问题 鼠标点击位置问题 详细入门解析
本帖为抢楼帖,欢迎抢楼!&
72719/5000排名<font color="#FF昨日变化2主题帖子积分
日久生情, 积分 2719, 距离下一级还需 2281 积分
日久生情, 积分 2719, 距离下一级还需 2281 积分
蛮牛币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/ ”
每日推荐:
61280/1500排名<font color="#FF昨日变化2主题帖子积分
蛮牛粉丝, 积分 1280, 距离下一级还需 220 积分
蛮牛粉丝, 积分 1280, 距离下一级还需 220 积分
在线时间265 小时
我想问下,当在用NGUI的时候,如何将鼠标点击得到的位置,设置成NGUI中一个label的位置呢,看到希望能够回复,谢谢
每日推荐:蔡司三坐标--蔡司三坐标测量机--三坐标测量仪-浙江朗通精密仪器有限公司基于JavaScript实现 获取鼠标点击位置坐标的方法
转载 & & 作者:
本篇文章,小编将为大家介绍基于JavaScript实现 获取鼠标点击位置坐标的方法。有需要的朋友可以参考一下
在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊声明代码在IE8,FireFox,Chrome下进行测试兼容鼠标点击位置坐标相对于屏幕
如果是涉及到鼠标点击确定位置相对比较简单,获取到鼠标点击事件后,事件screenX,screenY获取的是点击位置相对于屏幕的左边距与上边距,不考虑iframe因素,不同浏览器下表现的还算一致。 代码如下:function getMousePos(event) {&&&&&&&&&&& var e = event || window.&&&&&&&&&&& return {'x':e.screenX,'y':screenY}&&&&&&& }相对浏览器窗口简单代码即可实现,然而这是还不够,因为绝大多数情况下我们希望获取鼠标点击位置相对于浏览器窗口的坐标,event的clientX,clientY属性分别表示鼠标点击位置相对于文档的左边距,上边距。于是类似的我们写出了这样的代码 代码如下:function getMousePos(event) {&&&&&&&&&&& var e = event || window.&&&&&&&&&&& return {'x':e.clientX,'y':clientY}&&&&&&& }相对文档简单测试也没什么问题,但是clientX与clientY获取的是相对于当前屏幕的坐标,忽略页面滚动因素,这在很多条件下很有用,但当我们需要考虑页面滚动,也就是相对于文档(body元素)的坐标时怎么办呢?加上滚动的位移就可以了,下边我们试试怎么计算页面滚动的位移。其实在Firefox下问题会简单很多,因为Firefox支持属性pageX,与pageY属性,这两个属性已经把页面滚动计算在内了。在Chrome可以通过document.body.scrollLeft,document.body.scrollTop计算出页面滚动位移,而在IE下可以通过document.documentElement.scrollLeft ,document.documentElement.scrollTop 代码如下:function getMousePos(event) {&&&&&&&&&&& var e = event || window.&&&&&&&&&&& var scrollX = document.documentElement.scrollLeft || document.body.scrollL&&&&&&&&&&& var scrollY = document.documentElement.scrollTop || document.body.scrollT&&&&&&&&&&& var x = e.pageX || e.clientX + scrollX;&&&&&&&&&&& var y = e.pageY || e.clientY + scrollY;&&&&&&&&&&& //alert('x: ' + x + '\ny: ' + y);&&&&&&&&&&& return { 'x': x, 'y': y };&&&&&&& }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具小白swift语言开发iOS系列:获得点击位置的坐标值小白swift语言开发iOS系列:获得点击位置的坐标值科技功率百家号哟!阳光明媚的周一,又是元旦节,新的一天新的一年,各位萌新们好呀!今天已经是2018年了呢,我已经17岁又160个月了T.T程序媛永远青春不老今天是元旦节,我给大家带来的是一篇比较简单的内容:当用户在屏幕上进行点击操作时,如何获得点击位置的坐标值。好啦,我们赶快开始吧。依照惯例,先来看一下最终效果:我在屏幕上放置了两个文本框,分别用来动态显示点击位置的x轴坐标值和y轴坐标值。当点击屏幕的时候,就会变成下面这样:实现代码特别的简单,我们这就来看一下:首先,我们需要重载下面这个方法:注意这个方法的两个参数,它们的意义其实非常好理解。第一个参数“touches”是一个UITouch对象的集合,这是因为iOS是支持多点触控的,很容易理解吧。第二个参数是一个“UIEvent”对象,即触发事件。触发事件可以有很多不同的种类,比如常规的点击、长按,而点击本身也是由按下和抬起两个动作组成的。程序媛们都是好奇心很重的嘛,比如说我们就很好奇你们这些男生平时在一起的时候都会发生哪些事情啦~嗯嗯,所以这种好奇心促使我查看了一下UIEvent的定义。在UIEventType枚举中,有以下的定义:touches指多点触控的点击事件,moution当然是移动拖动事件了,presses也好理解,是按压事件。至于那个remoteControl是什么鬼?远程控制???这个时候我们发现了下面的东东:哇~~这就很好理解了嘛,扫了一眼,remoteControl包含播放啦、暂停啦。嗯嗯,简单解释来说,其实所谓的“远程控制”主要是用来给苹果的外设进行开发使用的,比如说我们可以通过操作耳机线上面的辅助控制器来播放音乐,这就是所谓的“远程控制”。好了好了,扯远了,这些不在我们今天的讨论范围。我们赶紧回来吧。刚才提到我们需要重载touchesBegan方法,在这个方法内部,我们可以通过下面这句代码来获得多点触控当中的某一个点:由于苹果支持多点触控,在大部分情况下,用户可能仅仅只是使用一个手指进行单点触控,所以swift提供了一个变量“first”来直接获得这个触控点——它即代表单点触控时的手指落点,也代表多点触控时第一个落在屏幕上的点。得到了这个点击位置后,我们可以通过下面一句代码来进一步获得位置数据:注意这个方法有一个UIView类型的入参。当界面上存在多个UIView的时候,这个入参用来告诉程序我们需要捕获的是位于哪一个UIView中的事件。得到了位置对象后,就可以很方便地获取坐标位置了:怎么样,虽然我说了很多有的没得,但是其实今天的例子特别的简单,有木有?各位萌新们请支持一下啦~~本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。科技功率百家号最近更新:简介:了解技术前沿,展望未来。作者最新文章相关文章

我要回帖

更多关于 按键精灵坐标偏移 的文章

 

随机推荐