Unity實(shí)現(xiàn)虛擬搖桿效果
本文實(shí)例為大家分享了Unity實(shí)現(xiàn)虛擬搖桿效果的具體代碼,供大家參考,具體內(nèi)容如下
首先添加兩者圖片

從左到右分別是Back和Front

將Front放到Back中心
在Front身上添加腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;//導(dǎo)入命名空間
public class JoyStick : MonoBehaviour,IPointerDownHandler,IPointerUpHandler {//實(shí)現(xiàn)接口
private bool isTouched = false;//標(biāo)志位,用于標(biāo)示值是否拖拽按鈕
private static float h = 0;
private static float v = 0;//這兩者用于表示水平(豎直)方向按鈕移動(dòng)的值,相當(dāng)于通過(guò)Input.GetAxis("Horizontal");Input.GetAxis("Vertical");
[SerializeField] private Vector2 joystickPivot;//按鈕中心位置在世界坐標(biāo)中的值
[SerializeField] private float radius;//按鈕的半徑(決定了按鈕的活動(dòng)范圍)
// Update is called once per frame
void Update () {
if (isTouched)
{
Vector2 mouPos = Input.mousePosition;
mouPos -= joystickPivot;//將鼠標(biāo)位置轉(zhuǎn)換為本地坐標(biāo)
if (Vector2.Distance(mouPos,Vector2.zero)>=radius)//如果鼠標(biāo)移動(dòng)超出范圍,將圖片放到邊緣
{
mouPos = mouPos.normalized*radius;
}
transform.localPosition = mouPos;
h = mouPos.x/radius;
v = mouPos.y/radius;
}
}
public void OnPointerDown(PointerEventData eventData)
{
isTouched = true;
}
public void OnPointerUp(PointerEventData eventData)
{
isTouched = false;
h = 0;
v = 0;//不拖拽時(shí)二者為0
transform.localPosition = Vector3.zero;//讓按鈕返回中心魏智
}
}
對(duì)于代碼中的h,v就是我們操作遙感時(shí)水平(豎直)方向獲取的值(0-1),其他腳本獲取這兩個(gè)靜態(tài)變量的值就可以實(shí)現(xiàn)對(duì)自身物體的移動(dòng)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity虛擬搖桿的實(shí)現(xiàn)方法
- unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick
- unity實(shí)現(xiàn)手游虛擬搖桿
- Unity3D使用UGUI開(kāi)發(fā)原生虛擬搖桿
- Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿
- unity實(shí)現(xiàn)手機(jī)端搖桿控制人物移動(dòng)
- Unity實(shí)現(xiàn)簡(jiǎn)單的虛擬搖桿
- Unity3D基于UGUI實(shí)現(xiàn)虛擬搖桿
- Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿
- Unity實(shí)現(xiàn)虛擬搖桿
- Unity UGUI通過(guò)搖桿控制角色移動(dòng)
- Unity使用ScrollRect制作搖桿
相關(guān)文章
asp.net中調(diào)用oracle存儲(chǔ)過(guò)程的方法
存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)來(lái)執(zhí)行它,下面給大家介紹下asp.net中調(diào)用oracle存儲(chǔ)過(guò)程的方法,需要的朋友可以參考下2015-08-08
C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列
這篇文章主要介紹了C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
C#如何實(shí)現(xiàn)子進(jìn)程跟隨主進(jìn)程關(guān)閉
多進(jìn)程開(kāi)發(fā)經(jīng)常會(huì)遇到主進(jìn)程關(guān)閉,子進(jìn)程需要跟隨主進(jìn)程一同關(guān)閉,比如調(diào)ffmpeg命令行實(shí)現(xiàn)的錄屏程序等,下面我們就來(lái)看看C#是如何實(shí)現(xiàn)子進(jìn)程跟隨主進(jìn)程關(guān)閉的吧2024-04-04
簡(jiǎn)單對(duì)比C#程序中的單線程與多線程設(shè)計(jì)
這篇文章主要介紹了C#程序中的單線程與多線程設(shè)計(jì)的簡(jiǎn)單對(duì)比,通過(guò)實(shí)際的代碼演示可以清晰看出多線程并發(fā)來(lái)避免單線程阻塞問(wèn)題的特點(diǎn),需要的朋友可以參考下2016-04-04
DevExpress獲取節(jié)點(diǎn)下可視區(qū)域子節(jié)點(diǎn)集合的實(shí)現(xiàn)方法
這篇文章主要介紹了DevExpress獲取節(jié)點(diǎn)下可視區(qū)域子節(jié)點(diǎn)集合的實(shí)現(xiàn)方法,是C#程序設(shè)計(jì)中較為常見(jiàn)的技巧,需要的朋友可以參考下2014-08-08
基于.NET編寫(xiě)工具類解決JSON亂碼問(wèn)題
在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到JSON數(shù)據(jù)處理的問(wèn)題,尤其是在數(shù)據(jù)傳輸和解析過(guò)程中,很容易出現(xiàn)編碼錯(cuò)誤導(dǎo)致的亂碼問(wèn)題,下面我們就來(lái)編寫(xiě)一個(gè).NET工具類來(lái)解決這一問(wèn)題吧2025-03-03
C#校驗(yàn)時(shí)間格式的場(chǎng)景分析
本文通過(guò)場(chǎng)景分析給大家講解C#里如何簡(jiǎn)單的校驗(yàn)時(shí)間格式,本次的場(chǎng)景屬于比較常見(jiàn)的收單API,對(duì)第三方的訂單進(jìn)行簽名驗(yàn)證,然后持久化到數(shù)據(jù)庫(kù),需要的朋友跟隨小編一起看看吧2022-08-08
漢字轉(zhuǎn)拼音軟件制件示例(漢字轉(zhuǎn)字母)
這篇文章主要介紹了c#漢字轉(zhuǎn)拼音的方法,但不能判斷多音字,大家可以參考修改使用2014-01-01

