您的位置:首页 > 移动开发 > Unity3D

Unity 滑鼠進入圖片後,如果移動,則打印座標

2018-02-11 17:53 330 查看
恩,標題很爛,因為我還在想…。標題雖然爛,但下面說明應該很清楚這是幹嘛的。如果你有好標題觀迎跟我說。

前言:

這裡有兩個功能:

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 “



寫在最後:

你看到這篇文章之後發財,記得分我一點。最後祝你們玩得開心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐