Unity3D - 製作虛擬搖桿 與 使用Input.GetAxis (一)

 在大學時期常常會碰到學弟妹或是同學莫名來請問如何製作虛擬搖桿

雖然方式有很多,不過官方範例專案中其實就有一個還不錯的簡單實作

以下提供實際引用的步驟及一些設定

在最一開始的,你需要找到由Unity官方提供的CrossPlatformInput.unitypage,5.x版本應該可以在Assets>Import Package 中找到

如果你是4.x版本,你可以在官方資源商店找到相同的案例

點選之後,如果不想特別調整,請全部匯入

如果你覺得不需要全部匯入,那把

  1. Editor資料匣底下的CrossPlatformInputInitialize.cs初始腳本
  2. Prefabs資料匣底下的MobileSingleStickControl.prefab
  3. Scripts資料匣底下的joystick.cs腳本

可以的話包含Sprites資料夾,大概會像下面這樣

匯入之後直接在你的專案場景,從Project視圖中找到 CrossPlatformInput > Prefabs > MobileSingleStickControl 拉進場景

如果沒錯誤出現,代表你完成我們的一半目標了,現在已經有一個簡單完整的虛擬搖桿

 

接著是使用上的微調

舉官方文件的例子,一般控制物件移動可以這樣實現

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;
    void Update() {
        float translation = Input.GetAxis("Vertical") * speed;
        float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
        translation *= Time.deltaTime;
        rotation *= Time.deltaTime;
        transform.Translate(0, 0, translation);
        transform.Rotate(0, rotation, 0);
    }
}

 以上透過Input.GetAxis移動的方式,可以使用實體搖桿或是鍵盤的上下左右、WASD鍵進行移動

這邊所提的按鈕在edit>Project Settings > Input 中找到對應的 Horizontal  , Vertical 並進行對應按鈕及參數的修改

 

 

而改用虛擬搖桿的時候,可以把Input.GetAxis修改一下,改用官方實做的 CrossPlatformInputManager.GetAxis,像是這樣

using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;

public class ExampleClass : MonoBehaviour {
    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;
    void Update() {
        float translation = CrossPlatformInputManager.GetAxis("Vertical") * speed;
        float rotation = CrossPlatformInputManager.GetAxis("Horizontal") * rotationSpeed;
        translation *= Time.deltaTime;
        rotation *= Time.deltaTime;
        transform.Translate(0, 0, translation);
        transform.Rotate(0, rotation, 0);
    }
}

然後根據你的使用需求,可以把 已掛載 Component 中 Joystick 的 Axes To Use 進行更動

Only Horizontal  是只使用虛擬搖桿的X座標 ,Only Vertical 只使用虛擬搖桿的Y座標

這樣就可以囉,至於有些人(像是我自己QQ)可能會發現由官方實做的這個簡易的虛擬搖桿

基本上無法跟隨畫面移動或是動態生成,而且移動範圍也是方形的區塊

我們下篇再來探討如何實做這些需求及把移動區塊變成圓形的,感謝

 


感謝觀看,若你能夠留下一些建議與感想
都會成為我寫文章的動力,感謝!!