Unity3D使用UGUI開發(fā)原生虛擬搖桿
在Unity3d中開發(fā)虛擬搖桿方式有比較多,可以使用EasyTouch、FairyGUI等插件來開發(fā)。本文給大家介紹使用Unity3d的原生UGUI來開發(fā)出自己的虛擬搖桿,這樣可以減少游戲資源包的大小。
先展示下效果圖:
現(xiàn)在開發(fā)我們的開發(fā)
創(chuàng)建一個Image1,并且在Image1創(chuàng)建一個子對象Image2
在Image1中掛載一個自定義腳本,這里我命名為Joystick
腳本代碼如下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class Joystick : ScrollRect { private float mRadius; public System.Action<RectTransform> JoystickMoveHandle; public System.Action<RectTransform> JoystickEndHandle; protected override void Start() { mRadius = this.GetComponent<RectTransform>().sizeDelta.x * 0.5f; this.content.gameObject.SetActive(false); } public override void OnDrag(PointerEventData eventData) { base.OnDrag(eventData); this.content.gameObject.SetActive(true); //虛擬搖桿移動 var contentPostion = this.content.anchoredPosition; if (contentPostion.magnitude > mRadius) { contentPostion = contentPostion.normalized * mRadius; SetContentAnchoredPosition(contentPostion); } //旋轉(zhuǎn) if (content.anchoredPosition.y != 0) { content.eulerAngles = new Vector3(0, 0, Vector3.Angle(Vector3.right, content.anchoredPosition) * content.anchoredPosition.y / Mathf.Abs(content.anchoredPosition.y) - 90); } } private void FixedUpdate() { if (this.content.gameObject.activeInHierarchy) { if (JoystickMoveHandle != null) { JoystickMoveHandle(this.content); } } } public override void OnEndDrag(PointerEventData eventData) { base.OnEndDrag(eventData); this.content.gameObject.SetActive(false); if (JoystickEndHandle != null) { JoystickEndHandle(this.content); } } }
然后將Image2拖動到content屬性變量里
這樣就可以移動并且拖動我們的虛擬搖桿了
接下來要讓我們的游戲主角跟隨我們的搖桿移動而移動
在我們的主角兒掛載一個自定義腳本
在Start方法里添加代碼:
mJoystick = GameObject.Find("Joystick").GetComponent<Joystick>(); mJoystick.JoystickMoveHandle = JoystickHandle; mJoystick.JoystickEndHandle = JoystickEndHandle;
其中JoystickHandle方法代碼為:
transform.eulerAngles = new Vector3(0, -content.eulerAngles.z, 0); transform.Translate(Vector3.forward * Time.deltaTime * mMoveSpeed);
接下來就可以運行我們的游戲,觀察主角移動旋轉(zhuǎn)位置。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號*)
最近做一個故障樹診斷的項目,用visio二次開發(fā),可以同時打開多個繪制的故障樹圖形文檔。項目中需要實現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個星號*2013-04-04C#使用ScrapySharp實現(xiàn)多線程下載操作
在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)抓取是一個常見的需求,無論是為了數(shù)據(jù)分析、內(nèi)容聚合還是自動化測試,ScrapySharp 是一個基于 .NET 的輕量級、高性能的網(wǎng)頁抓取庫,本文將探討如何在 C# 中使用 ScrapySharp 實現(xiàn)多線程下載策略,需要的朋友可以參考下2024-08-08c#創(chuàng)建圓形類Circle、矩形類實現(xiàn)代碼
這篇文章主要介紹了c#創(chuàng)建圓形類Circle實現(xiàn)代碼,其中包括set,get方法,需要的朋友可以參考下2020-11-11C#?設(shè)置Chart的X軸為時間軸???????詳情
這篇文章主要介紹了C#設(shè)置Chart的X軸為時間軸???????詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08基于C#實現(xiàn)自定義計算的Excel數(shù)據(jù)透視表
數(shù)據(jù)透視表(Pivot?Table)是一種數(shù)據(jù)分析工具,通常用于對大量數(shù)據(jù)進(jìn)行匯總、分析和展示,本文主要介紹了C#實現(xiàn)自定義計算的Excel數(shù)據(jù)透視表的相關(guān)知識,感興趣的可以了解下2023-12-12