Unity搖桿制作的方法
本文實(shí)例為大家分享了Unity搖桿制作方法的具體代碼,供大家參考,具體內(nèi)容如下
一.UI制作
1.首先創(chuàng)建一個(gè)空物體,命名為搖桿,錨點(diǎn)調(diào)至左下角

2.創(chuàng)建一個(gè)image作為搖桿廚盆的有效地方,并命名為tough_place

3.創(chuàng)建一個(gè)image放入搖桿的背景圖片,并命名為bg。

4.創(chuàng)建一個(gè)image放入搖桿的控制點(diǎn),并命名為point。

5.把tough_place的顏色設(shè)置為透明

二.代碼編寫
創(chuàng)建腳本命名為PEListener,并引入相關(guān)接口,并進(jìn)行封裝。
using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class PEListener : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
public Action<PointerEventData> onClickDown;//鼠標(biāo)按下時(shí)觸發(fā)的事件
public Action<PointerEventData> onClickUp;//鼠標(biāo)抬起時(shí)觸發(fā)的事件
public Action<PointerEventData> onClickDrag;//鼠標(biāo)按下時(shí)觸發(fā)的事件
public void OnPointerDown(PointerEventData eventData)
{
if (onClickDown != null)
{
onClickDown(eventData);
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (onClickUp != null)
{
onClickUp(eventData);
}
}
public void OnDrag(PointerEventData eventData)
{
if (onClickDrag!=null)
{
onClickDrag(eventData);
}
}
}
創(chuàng)建腳本命名為Test,進(jìn)行相關(guān)的邏輯操作。
(1)定義相關(guān)數(shù)據(jù)并傳入
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Test : MonoBehaviour {
//輪盤UI
public Image imageTough;//輪盤觸摸區(qū)域
public Image imgDir;//輪盤背景
public Image imaPoint;//輪盤操作點(diǎn)
//輪盤相關(guān)數(shù)據(jù)
Vector2 startPos;//輪盤按下的坐標(biāo)
Vector2 defulPos;//輪盤按下的坐標(biāo)
float poinDis=90;// 輪盤中心和邊緣的最大距離(數(shù)據(jù)自己測試)
private void Start()
{
defulPos = imageTough.transform.position;
//由于我們的Canvas選擇的是Scale with Screen Size,且Match為1,也就是UI縮放受高度影響到大,具體數(shù)據(jù)見下圖
//poinDis實(shí)際大小=poinDis *縮放
poinDis = Screen.height * 1.0f / 1334 * poinDis;
}
}

(2)進(jìn)行相關(guān)邏輯的書寫
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Test : MonoBehaviour {
//輪盤UI
public Image imageTough;//輪盤觸摸區(qū)域
public Image imgDir;//輪盤背景
public Image imaPoint;//輪盤操作點(diǎn)
//輪盤相關(guān)數(shù)據(jù)
Vector2 startPos;//輪盤按下的坐標(biāo)
Vector2 defulPos;//輪盤按下的坐標(biāo)
float poinDis=90;// 輪盤中心和邊緣的最大距離(數(shù)據(jù)自己測試)
private void Start()
{
defulPos = imageTough.transform.position;
//由于我們的Canvas選擇的是Scale with Screen Size,且Match為1,也就是UI縮放受高度影響到大,具體數(shù)據(jù)見下圖
//poinDis實(shí)際大小=poinDis *縮放
poinDis = Screen.height * 1.0f / 1334 * poinDis;
RegisterTouchEvts();
}
public void RegisterTouchEvts()
{
PEListener lister = imageTough.gameObject.AddComponent<PEListener>();
lister.onClickDown = (PointerEventData evt) =>
{
//鼠標(biāo)按下時(shí)設(shè)置輪盤背景位置
startPos = evt.position;
imgDir.transform.position = evt.position;
};
lister.onClickUp = (PointerEventData evt) =>
{
//鼠標(biāo)抬起時(shí)設(shè)置輪盤背景位置和輪盤操作點(diǎn)為默認(rèn)位置
imgDir.transform.position = defulPos;
imaPoint.transform.localPosition = Vector2.zero;
};
lister.onClickDrag = (PointerEventData evt) =>
{
//計(jì)算是否超過輪盤中心和邊緣的最大距離
Vector2 dir = evt.position - startPos;
float len = dir.magnitude;
//超過了,限制為最大位置
if (len > poinDis)
{
Vector2 clampDir = Vector2.ClampMagnitude(dir, poinDis);
imaPoint.transform.position = startPos + clampDir;
}
else
{
imaPoint.transform.position = evt.position;
}
};
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# 實(shí)現(xiàn)Trim方法去除字符串前后的所有空格
這篇文章主要介紹了C# 實(shí)現(xiàn)Trim方法去除字符串前后的所有空格,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
C#開發(fā)Windows UWP系列之對話框MessageDialog和ContentDialog
這篇文章介紹了C#開發(fā)Windows UWP系列之對話框MessageDialog和ContentDialog,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C# winForm實(shí)現(xiàn)的氣泡提示窗口功能示例
這篇文章主要介紹了C# winForm實(shí)現(xiàn)的氣泡提示窗口功能,涉及C# winForm窗口屬性與設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
C# BackgroundWorker組件學(xué)習(xí)入門介紹
一個(gè)程序中需要進(jìn)行大量的運(yùn)算,并且需要在運(yùn)算過程中支持用戶一定的交互,為了獲得更好的用戶體驗(yàn),使用BackgroundWorker來完成這一功能2013-10-10

