-
Notifications
You must be signed in to change notification settings - Fork 2
tutorial unityproject
- xInputTypeを利用することで、キー操作をシュミレートできます。
- Unipadが動作している端末はUnityを実行するPCと同一のWifiネットワーク環境に接続している必要があります。
- Unity 5.2.4 および 5.3.1で動作確認をしています。
-
Unipadで操作する対象となるオブジェクトが既にプレハブとして作成されている。
-
プレハブにはスクリプト(以下、PlayerScript.csとします)がアタッチされている。
-
PlayerScript.cs にはupdate()メソッドが実装されており、Inputを利用してキーボードでの操作が可能である
2. Unity用のパッケージをダウンロードしてAssetsフォルダ内に配置する
- ProjectビューのAssetsフォルダ上でメニュー表示 > Import Package > Custom Packeage でダウンロードしたUnipad.unitypackageを選択してください。
- 以下のようなフォルダ構成になるはずです。
- [OSCHostController]は/Unipad/prefab/内にあります。
| name | |
|---|---|
| Default Input Type | 起動時に設定されるPadTypeを選択 |
| OutGoingPort | UnipadへOSCで送信するポート |
| IncommingPort | Unipadからの送信データを受信するポート |
| ShowGUI | デバッグ情報を表示するかどうか? |
| Targets(SIZE) | コントロール対象のオブジェクトの数(1-4) |
| Targets(Element n) | コントロール対象のプレハブを登録 |
- 変数の定義を作成
//先頭に以下4行を追加
private xInputType sensorType = xInputType.GAMEPAD;
public xPadID padid;
public OSCHostConroller controller;
public xMultiInputs Input;
- Initメソッドを追加(最低限必要な内容は以下の2行です。必要に応じて後で引数の追加など行ってください)
public void Init(xPadID id){
controller = GameObject.Find ("OSCHostController").GetComponent<OSCHostConroller> ();
padid = id;
}
- update()メソッドの先頭に以下を追加
void update(){
Input = controller.xPadChannels [padid.ToString()]._input;
sensorType = Input.sensorType;
//既存のコード
.
.
}
- Start()メソッド内の
g.GetComponent<fishControll> ().Init (pad,ColorUtils.ToRGB( colors[i] ));
を
g.GetComponent<PlayerScript> ().Init (pad );
などと編集する
変更は以上です。
Editor上では、キーボードの十字キーなどで操作可能なはずです。
その後デバイス上でビルドして、アプリケーションを起動後、UnipadからOSCで接続してみてください。
-
Unipadを利用する際、手順.5で実施したようにInputメソッドを独自拡張で上書きしています。
-
これにより、通常のInputの取得方法のままで、Unipadからのコントロール内容を取得できます。
-
上書きされるメソッドの一覧 |name| | |--|--| |Input.GetAxis( string axisName )|Gamepadの十字キー操作、TouchPadのタッチ座標が取得できます | |Input.GetKeyDown( KeyCode key )|ボタンを押したイベントを取得できます。 | |Input.GetKeyUp( KeyCode key )| ボタンから手が離れたイベントを取得できます。| |Input.GetKey( KeyCode key )| ボタンが押されているかの状態を取得できます。| |Input.gyro.rotationRateUnbiased | Gyroscope.rotationRateUnbiasedの値 ※GyroPadの時のみ| |Input.gyro.attitude | Gyroscope.attitudeの値をQuaternion 型で返します。 ※GyroAttitudeの時のみ | |Input.gyro.gyroAttitude | Gyroscope.attitudeの値をVector4型にて返します。 ※GyroAttitudeの時のみ |
-
Unipadの各ボタンは以下のKeyCodeに変換されて取得できます。 |name|KeyCode on Unity|TouchPad|Gamepad|Gamepad16| |--|--|--|---|---| |menu|KeyCode.Tab |✔|✔|✔| |Up| KeyCode.UpArrow||✔|✔| |Down| KeyCode.DownArrow||✔|✔| |Left| KeyCode.LeftArrow||✔|✔| |Right| KeyCode.RightArror||✔|✔| |ButtonA| KeyCode.Z|✔|✔|✔| |ButtonB| KeyCode.X|✔|✔|✔| |ButtonX| KeyCode.A|||✔| |ButtonY| KeyCode.S|||✔| |ButtonL1| KeyCode.Q|||✔| |ButtonL2| KeyCode.W|||✔| |ButtonR1| KeyCode.R|||✔| |ButtonR2| KeyCode.E|||✔| |ButtonS1| KeyCode.Alpha1|||✔| |ButtonS2| KeyCode.Alpha2|||✔| |TouchArea| KeyCode.O|✔||✔| |TouchArea2| KeyCode.P|||✔|
- PlayerScripts.csのサンプル
using UnityEngine;
using System.Collections;
public class PlayerScripts : MonoBehaviour {
//for Unipad Controlls.
private xInputType sensorType = xInputType.GAMEPAD;
public xPadID padid;
public OSCHostConroller controller;
public xMultiInputs Input;
public void Init(xPadID id){
controller = GameObject.Find ("OSCHostController").GetComponent<OSCHostConroller> ();
padid = id;
transform.position = new Vector3 (0f, 0f, 0f);
}
// Update is called once per frame
void Update () {
Input = controller.xPadChannels [padid.ToString()]._input;
sensorType = Input.sensorType;
//move with arrow keys.
float speed = .1f;
float x = Input.GetAxis ("Horizontal") * speed;
float y = Input.GetAxis ("Vertical") * speed;
transform.position += new Vector3 (x, 0f, y);
//Press A Button,reset position
if (Input.GetKeyDown (KeyCode.A)) {
transform.position = new Vector3 (0f, 0f, 0f);
}
}
}