Skip to content

tutorial unityproject

Tomoki Hayashi edited this page Feb 4, 2019 · 1 revision

概要

  • xInputTypeを利用することで、キー操作をシュミレートできます。
  • Unipadが動作している端末はUnityを実行するPCと同一のWifiネットワーク環境に接続している必要があります。
  • Unity 5.2.4 および 5.3.1で動作確認をしています。

1. 既存プロジェクトを開く

  • 前提としてプロジェクトに以下の設定が行われている必要があります。

  • Unipadで操作する対象となるオブジェクトが既にプレハブとして作成されている。

  • プレハブにはスクリプト(以下、PlayerScript.csとします)がアタッチされている。

  • PlayerScript.cs にはupdate()メソッドが実装されており、Inputを利用してキーボードでの操作が可能である

2. Unity用のパッケージをダウンロードしてAssetsフォルダ内に配置する

  • ProjectビューのAssetsフォルダ上でメニュー表示 > Import Package > Custom Packeage でダウンロードしたUnipad.unitypackageを選択してください。
  • 以下のようなフォルダ構成になるはずです。

3.[OSCHostController]をHierarchyにドラッグする

  • [OSCHostController]は/Unipad/prefab/内にあります。

4.HierarchyでOSCHostControllerを選択肢、インスペクターで、OSCHostController(Script)のプロパティーを調整してください。

name
Default Input Type 起動時に設定されるPadTypeを選択
OutGoingPort UnipadへOSCで送信するポート
IncommingPort Unipadからの送信データを受信するポート
ShowGUI デバッグ情報を表示するかどうか?
Targets(SIZE) コントロール対象のオブジェクトの数(1-4)
Targets(Element n) コントロール対象のプレハブを登録

5.プレハブにアタッチされているスクリプト(例:PlayerScript.cs)にUnipad用のコードを追加する。

  • 変数の定義を作成
//先頭に以下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;
//既存のコード
 .
 .
}

6. OSCHostController.csを編集する

  • 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);
		}


	}
}

Clone this wiki locally