Unity 滑鼠進入圖片後,如果移動,則打印座標
2018-02-11 17:53
330 查看
恩,標題很爛,因為我還在想…。標題雖然爛,但下面說明應該很清楚這是幹嘛的。如果你有好標題觀迎跟我說。
1. 滑鼠進入圖片後,如果移動滑鼠,則每一次 Update 將執行一次
2. 雙座標系統:視窗座標 + 圖片座標 ( 下圖有說明 )
第一點我想也不用再多做解釋,至於第二點的視窗座標也不用多說了 (兩個都不說那到底你要說啥?),我們直接說重點:”圖片座標”。
我想要做一個把滑鼠移到圖片 ( RawImage ) 左下角,責打印出 ( x = 0, y = 0 ),這有啥用 ? 用處可大了,如果我之後要在圖片中畫一個十字線,而這個十字線是追蹤我的滑鼠的,那就必須要知道滑鼠在圖片中的座標吧 ? 當然這還可以玩很多花樣,這就交給廣大讀者的你們去發揮了。
補充:為了滿足大家,我真的做了一個畫十字線的專案,可以參考我新的這篇文章 ( http://blog.csdn.net/weixin_38884324/article/details/79312992 ) ,比這篇還要更強大 ,而且改進了很多功能。如果你要學習,請看這篇文章;如果你要實際專案使用,請看我的新文章。
好了,看圖說故事,下圖為雙座標系統 ( 視窗座標 + 圖片座標 ) 的說明,應該一看就懂了。
記得在外面加入 Event Trigger
將 Pointer Enter 對印到 C# 的 OnMouseEnter ()
將 Pointer Exit 對印到 C# 的 OnMouseExit ()
前言:
這裡有兩個功能:1. 滑鼠進入圖片後,如果移動滑鼠,則每一次 Update 將執行一次
2. 雙座標系統:視窗座標 + 圖片座標 ( 下圖有說明 )
第一點我想也不用再多做解釋,至於第二點的視窗座標也不用多說了 (兩個都不說那到底你要說啥?),我們直接說重點:”圖片座標”。
我想要做一個把滑鼠移到圖片 ( RawImage ) 左下角,責打印出 ( x = 0, y = 0 ),這有啥用 ? 用處可大了,如果我之後要在圖片中畫一個十字線,而這個十字線是追蹤我的滑鼠的,那就必須要知道滑鼠在圖片中的座標吧 ? 當然這還可以玩很多花樣,這就交給廣大讀者的你們去發揮了。
補充:為了滿足大家,我真的做了一個畫十字線的專案,可以參考我新的這篇文章 ( http://blog.csdn.net/weixin_38884324/article/details/79312992 ) ,比這篇還要更強大 ,而且改進了很多功能。如果你要學習,請看這篇文章;如果你要實際專案使用,請看我的新文章。
好了,看圖說故事,下圖為雙座標系統 ( 視窗座標 + 圖片座標 ) 的說明,應該一看就懂了。
第一步 C # :
using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class NewBehaviourScript : MonoBehaviour { public RawImage img; public void OnMouseEnter () { StartCoroutine ("OnMouseMoveInit"); } public void OnMouseExit () { StopCoroutine ("OnMouseMoveInit"); } IEnumerator OnMouseMoveInit () { Vector3 mousePos = Vector3.zero; while (Application.isPlaying) { // 滑鼠有移動才執行 if (mousePos != (mousePos = Input.mousePosition)) { // 加入圖片座標的應用,哈 RectTra 4000 nsform r = img.GetComponent <RectTransform> (); float mouseImgX = mousePos.x - ((Screen.width - r.rect.width) / 2); float mouseImgY = mousePos.y - ((Screen.height - r.rect.height) / 2); // OnMouseMove (mousePos.x, mousePos.y, mouseImgX, mouseImgY); } yield return new WaitForEndOfFrame (); } } void OnMouseMove (float x, float y, float mouseImgX, float mouseImgY) { print ("滑鼠在視窗上的座標:" + x + ", " + y + "\t\t滑鼠在圖片上的座標:" + mouseImgX + ", " + mouseImgY); } }
第二步:
創建一個 RawImage 的 UI 物件,然後把他加入 C# 的 img 變數中記得在外面加入 Event Trigger
將 Pointer Enter 對印到 C# 的 OnMouseEnter ()
將 Pointer Exit 對印到 C# 的 OnMouseExit ()
執行結果:
看到以下圖片滑鼠指在圖片(右方白色區域)的左下角,因為左下角是原點,所以打印 “滑鼠在圖片上的座標 : 1, 7 “寫在最後:
你看到這篇文章之後發財,記得分我一點。最後祝你們玩得開心。相关文章推荐
- Unity 滑鼠進入 RawImage 範圍內,變成十字鼠 ( 用 RawImage 來畫 )
- 打印unity界面并保存
- 黑马程序员之C#编程基础学习笔记:提示用户输入两个整数(假设i1,i2)。如果i1,i2都是正数,则将i2的值递增一个数,然后打印i1+i2的值;如果i1,i2都是负数,则将i1的值递减10个数,然后
- unity上用EasyTouch如果同时有EasyJoystick的话,不能同时按EasyJoystick和EasyTouch的解决办法
- 一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
- Unity在安卓环境下通过adb打印语句
- 如果在 unity中滚动 3D 骰子
- 给你一个整型数组如{1,3,4,7,2,1,1,5,2}, * 打印出现次数最多的那个数,如果最多的次数相同,则打印数字大的那个数。
- Unity如果制作特效
- 检查 android.mk条件如果执行,在android.mk中打印日志信息
- 2.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统纪录存款人姓名、住址、存款类型、存款日期、利率等信息,并打印出存款单给储户;如果是取款,系统计算利息并打印利息清单给储户。
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8
- 老大要求把Word文档加上公司的标识,公司名文字或者logo图片都可以,但要求是用电脑打开(电子文档时)能看见标识,如果打印出来(纸质文档)就不显示出来,如何实现?
- 编写一个程序,从标准输入一行一行地读取文本,并完成如下任务:如果文件中有两行或更多行相邻的文本内容相同,那么就打印其中一行,其余行不打印。
- unity, 如果碰撞使用2d物理,为防止颤动,需将更新position的代码写在FixedUpdate里
- 循环录入5个人的年龄,并计算平均年龄,如果录入的数据出现负数或者大于130的数,立即停止输出报错(无需打印平均年龄)
- 打印fastjson对象时,如果内部键值为null,则该键不会打印出来
- 在Delphi7 报表如果横向打印,在线等!
- 在MFC程序中,加入一个cpp文件,如果想要打印输出信息的话,用这个语句最便捷