Unity3d虛擬搖桿控制物體移動及旋轉
王者榮耀在現在看來可能已經成為不少人每天都會開啟一款軟體,角色的控制及其操作方式簡單,使其短時間內獲得了大量的玩家喜愛和追捧。
可以很明顯的看到王者榮耀的操作方式就是虛擬搖桿,可以控制人物的的移動,及其旋轉,或者是控制技能的釋放方向。此篇部落格就unity中如何實現利用UI(虛擬搖桿)控制物體的移動和旋轉。羅馬的路很多,這裡只是其中一條,還望多提出問題,共同學習。
首先,建立一個場景
物體如下: (建立一個炮嘴,方便觀察)
接著是建立UI,網上素材有很多,隨便就可以搜出來好看的圖片
圖片:
層級面板:
簡單操作後,進入到程式碼:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class JoyStick : MonoBehaviour { //搖桿 private GameObject center; //搖桿位置限制 public float PositionRange; //得到物體 private GameObject cube; //移動速度 public float MoveSpeed; //平滑度 public float smoothing; // Use this for initialization void Start () { //拿到搖桿 center = transform.Find("Center").gameObject; cube = GameObject.Find("Cube"); //繫結事件 UIEventTrigger.Get(center).onPointerDown = MoveByPC;//※ } private void MoveByPC(PointerEventData data) { StartCoroutine("MovePC"); } IEnumerator MovePC() { while (Input.GetMouseButton(0)) { // center.transform.position = Input.mousePosition;初級版搖桿移動 //拿到滑鼠的座標 Vector3 MousePos = new Vector3(Input.mousePosition.x,Input.mousePosition.y,0);//平面座標,只需要得到X,Y //偏移量的計算 = 滑鼠- 大圓盤 Vector3 offset = MousePos - this.transform.position; //限制移動範圍 if (offset.magnitude>PositionRange)//※ { //新的偏移量 = 規定範圍 * 偏移量的方向 offset = PositionRange * offset.normalized;//偏移量的單位化(得到方向) } //搖桿的移動= 初始位置 + 偏移量 center.transform.position = this.transform.position + offset; //移動賦給玩家 //求得移動方向 Vector3 dir = new Vector3(offset.x,0,offset.y); cube.transform.Translate(dir.normalized*Time.deltaTime*MoveSpeed,Space.World); //旋轉賦給物體 Quaternion qua = Quaternion.LookRotation(dir.normalized);//※ 將Vector3型別轉換四元數型別 cube.transform.rotation = Quaternion.Lerp(cube.transform.rotation, qua, Time.deltaTime * smoothing);//四元數的插值,實現平滑過渡 yield return null; } //滑鼠鬆開,搖桿位置復位(初始化) center.transform.localPosition = Vector3.zero; } // Update is called once per frame void Update () { } }
引用指令碼UIEventTrigger,關於該指令碼的使用和說明詳見點選開啟連結。簡單解釋幾句,在UI物體上的不同的操作方式,比如點選,雙擊,拖拽扥操作,可以執行其對應的監聽事件。在虛擬搖桿中用到的是onPointDown(注意大小寫,方法不同),當滑鼠點選時執行的監聽事件。UIEventTrigger熟悉後,會改善我們的開發的效率。
還使用到了協程,協程的定義和使用詳見點選開啟連結。
現在開始理一下邏輯:我們操作模擬搖桿 當手指按下拖拽移動時,小圓盤式跟隨著我們的手指的,當手指離開螢幕,小圓盤迴到初始位置,即大圓盤的位置。先實現這一步:
使用到了UIEventTrigger中的onPointerDown監聽事件,當滑鼠即手指按下時 觸發監聽事件,開始協程
協程內:滑鼠為按下狀態時進入迴圈,講滑鼠位置轉換為世界座標(或者將搖桿轉換為螢幕座標計算也可以),和大圓盤的位置相減得到變化向量。控制變化量的大小,控制在合適範圍內。
offset.magnitude是Vector3 的一個方法,將向量轉換為長度,這裡使用方便判斷。
如果超出範圍,變化量應等於最大的範圍。
將變化量賦值給搖桿,註釋解釋的很清楚了。
控制搖桿的位置之後,需要把變化量的方向賦給我們的物體,為什麼是方向呢,因為我們只需要他的方向,在此之前,應該看一下物體是在哪個平面移動,比如說由x,z軸組合的平面內移動,則需要把變化量轉換成這個平面內的向量,因為,我們的向量是x,y軸組成的平面內的向量,需要轉換一下。
然後就是簡單的移動程式碼,需要注意的是方向的向量需要單位化,原因是1*任何數=任何數,方法是 “向量.normalized”。
然後賦值旋轉 此處用到了四元數的一個方法Quternion.LookRotation,具體瞭解點選開啟連結,可以理解為把三維座標(方向)轉換成四元數,在賦值給這個物體的旋轉,四元數不必過多糾結。因為不好理解。。。
Quternion.Lerp為線性差值,在很多地方都有這個方法,詳見點選開啟連結。
當滑鼠擡起,即退出while迴圈時,讓搖桿復位。
旋轉可以寫一個新腳本里面用另一個搖桿控制。
好了,到此這篇部落格就結束了,其實對小白和新手並不友好。但是路會越走越寬,終有一天會學到,理解到。
相關推薦
Unity3d虛擬搖桿控制物體移動及旋轉
王者榮耀在現在看來可能已經成為不少人每天都會開啟一款軟體,角色的控制及其操作方式簡單,使其短時間內獲得了大量的玩家喜愛和追捧。 可以很明顯的看到王者榮耀的操作方式就是虛擬搖桿,可以控制人物的的移動,及其旋轉,或者是控制技能的釋放方向。此篇部落格就unity中如何實
Unity3D搖桿控制物體移動及圖片
Unity3D搖桿控制物體移動 指令碼掛在移動的控制器上 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;
Cocos2d-x 3.10 版本的模擬搖桿控制精靈移動
VS2017下測試沒有問題,網上程式碼大多有瑕疵什麼的,這個經過我一定的修改。 Joystick.cpp #include "Joystick.h" using namespace cocos2d; //定義一個計時器,隨時檢測滑鼠點選的位置 void HRocker::updat
unity3d 虛擬搖桿 ugui
網上找了好多都嫌麻煩,谷歌了一下,完美解決。 需要先建立 Canvas,如下: 程式碼拖拽到 backImage裡: JoyStick.cs using System.Collections; using System.Collec
Unity ——UGUI 通過搖桿控制角色移動
測試結束後,大家就會對這些介面方法有一些初步的瞭解。using UnityEngine; using UnityEngine.EventSystems; // UGUI提供了一些用來操作控制元件的一些方法, 這些方法是以回撥的形式提供的 // 通過介面回撥來實現的 /* * IPointerEnter
Unity3d 控制角色移動 鍵盤按鍵與虛擬搖桿
先上角色移動指令碼 using UnityEngine; using System.Collections; public class PlayerMove:MonoBehaviour
Unity 實現手遊裡面滑輪搖桿控制移動
很多手遊裡面都有一個滑輪控制人物移動 我前段時間也研究了一下 下面附上原始碼,因為有註釋我就不多說什麼了 原始碼: public class CoronaScripts : MonoBehaviour {  
Unity3D控制物體移動
在遊戲開發中,遊戲物體的移動是最基本的,如果連物體都移動不起來,那就不用說玩遊戲了。 下面記錄了自己在開發中實現的物體移動,不同專案可能有不同的物體移動實現,也有很多種不同的物體移動實現,文章會持續更新。 1.rigidbody.MovePosition()控制物體上下左
[Unity3D]簡單的UGUI滑條控制物體移動
滑條控制物體移動 在做作業的時候需要用滑條控制物體的直線滑動,簡單寫了一下,在這裡分享一下 1、效果 2、用法 建立一個canvas 在canvas上建立一個slider,命名為Mslider 給Mslider加上MySlider指令碼 將目標物體
Unity3d 基於NGUI的虛擬搖桿實現
實現效果預覽 C#程式碼 實現: 使用NGUI新增虛擬搖桿背景和其子物體按鈕,為按鈕Attach boxcollider和ButtionScript。為按鈕新增如下指令碼: 注意:其中的靜態屬性可以在控制物體移動的程式碼中訪問用於控制。
Unity3d使用UGUI開發原生虛擬搖桿
在Unity3d中開發虛擬搖桿方式有比較多,可以使用EasyTouch、FairyGUI等外掛來開發。本文給大家介紹使用Unity3d的原生UGUI來開發出自己的虛擬搖桿,這樣可以減少遊戲資源包的大小。先展示下效果圖:現在開發我們的開發建立一個Image1,並且在Image1
Unity3D物體移動及Player移動的通用方法
物體移動的常用方法一、transform.Translatetransform.Translate(Vector3.forward *MoveSpeed * Time.deltaTime, Space.transform); 二、velocity(剛體)gameObject
Unity3D中開發2D遊戲——簡單控制物體移動
在Unity3D中開發2D遊戲簡單實現物體的上下左右移動1.簡單實現物體的上下左右移動(左前右前)掛到物體下(本人學習過程中所記筆記 給像我一樣的新人提供方便)2.如何正確顯示物體移動時方向定義public精靈陣列tankSprite[]實現按下方向鍵同時顯示物體的正確方向
Unity3D學習筆記(二十三):事件接口、虛擬搖桿、層級管理和背包系統
ram veh ces 跟隨鼠標 style 組件 屏幕 向上 grid 事件接口 IDragHandler(常用):鼠標按下拖動時執行(只要鼠標在拖動就一直執行) IDropHandler:對象拖動結束時,如果鼠標在物體的範圍內,執行一次(依賴於IDragHandler存
QT 模仿Android遊戲中虛擬搖桿(3)讓圓隨著角度移動
接著上一篇講起,我們需要在滑鼠離開圓的範圍的時候,讓圓跟著滑鼠與圓心的角度移動,那麼我們來看看我們的已知量是什麼: 1、圓心座標 2、圓的半徑 3、當前滑鼠的座標 運用一下我們的中學知識,根據(1、3
cocos2D 虛擬搖桿Joystick功能實現
皮膚 @implementation InputLayer - (id)init { if(self = [super init]) { winSize = [[CCDirector sharedDirector] winSize];
虛擬搖桿的修改
poi 如果 [1] 運行時 inpu tex div 這樣的 通過 上次的代碼運行時會有bug:報錯 ArgumentException: Index out of bounds. 即Input.GetTouch()函數進行了越界訪問。於是上網看了看,發現Touc
Unity —— 通過鼠標點擊控制物體移動
技術 aps this lap sep CA sha pub mon 1 //ClickMove - - 通過鼠標點擊控制物體移動 2 3 using System.Collections; 4 using System.Collections.Generic
Easy Touch 搖感控制人物移動
form != iou 導入 方法 har clas 觸摸 delta Easy Touch 搖感控制人物移動 public class joystick : MonoBehaviour { public float Speed;
WASD鍵控制物體移動
指令碼掛在物體上 using System.Collections; using System.Collections.Generic; using UnityEngine; public class write : MonoBehaviour { private Transfo