Help us understand the problem. What is going on with this article?

[Unity]CrossPlatformInputを使ってみる

More than 3 years have passed since last update.

環境

下記の環境を使用しています。

  1. Unity 5.4.1
  2. C#

1.下準備

  1. [File > Build Settings]から[Android]を選択しSwitch Platform
  2. [Assets > Import Package > CrossPlatformInput]を選択、インポート

2.オブジェクトを配置

  1. [Assets/Standard Assets/CrossPlatformInput/Prefabs]から[MobileSingleStickControl]をヒエラルキーにドラッグ&ドロップ
  2. [GameObject > UI > EventSystem]を選択し、EventSystemを追加
  3. [Mobile Input > Enable]を選択。(選択出来なければ選択した状態なので問題なし)

基本的にここまで完了すれば動きます。

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

public class Move : MonoBehaviour
{

    // Update is called once per frame
    void Update()
    {
        var x = CrossPlatformInputManager.GetAxis("Horizontal");
        var y = CrossPlatformInputManager.GetAxis("Vertical");
        transform.position += (Vector3.right * x + Vector3.up * y) * Time.deltaTime;

        if (CrossPlatformInputManager.GetButton("Jump"))
        {
            this.GetComponent<Renderer>().material.color = Color.red;
        } else
        {
            this.GetComponent<Renderer>().material.color = Color.white;
        }
    }
}

こんな感じのコードを作って適当に作ったオブジェクトに追加するとこんな感じ。

screen.gif

3.カスタマイズ

ボタンの追加

  1. ヒエラルキーにあるMobileSingleStickControlの下にいるJumpButtonをDuplicate
  2. InspectorのButtonHandlerのNameの項目をFire1に変更

キャプチャ3.PNG キャプチャ2.PNG

これで

CrossPlatformInputManager.GetButton("Fire1");

的なノリで入力を取得できます。
screen2.gif

スティックの追加

  1. ヒエラルキーにあるMobileSingleStickControlの下にいるMobileJoystickをDuplicate
  2. InspectorのJoystickのHorizontal Axis NameをMouse Xに変更
  3. InspectorのJoystickのVertical Axis NameをMouse Yに変更
Move.cs
using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;

public class Move : MonoBehaviour
{

    // Update is called once per frame
    void Update()
    {
        var x = CrossPlatformInputManager.GetAxis("Horizontal");
        var y = CrossPlatformInputManager.GetAxis("Vertical");
        transform.position += (Vector3.right * x + Vector3.up * y) * Time.deltaTime;

        var x_r = CrossPlatformInputManager.GetAxis("Mouse X");
        var y_r = CrossPlatformInputManager.GetAxis("Mouse Y");
        transform.Rotate(new Vector3(y_r, 0f, x_r) * Time.deltaTime * 30f);
    }
}

テスト用のコードをこんな感じにしてオブジェクトを右スティックで回転させる的な事が出来ます。
screen3.gif

カスタマイズの補足

 ButtonHandlerJoystickで指定した名前はInputManagerに追加されているものじゃないと[Mobile Input>Disable]で無効にして実行した時にエラーが発生します。
なので、追加/変更するときはInputManagerを確認して合わせるなり追加するなりする必要があります。
 また、Joystickに関してはMovement Rangeで可動範囲を調整したりAxes To Useで可動方向を制限したりできます。

改善

 このJoystickですがスティックに当たる部分をドラッグする必要が有り、可動範囲内を押しても何も反応しません。その為なんとも言えない操作感と言うかあまり直感的じゃない気がします。
 そこで、可動範囲をタップしたらスティックを移動、そのままドラッグ出来るようにしてみました。
screen4.gif

下記の手順で実装しました。

  • Joystick.csをMyJoystick.csとかにまるっとコピペ
  • 下記のコードを追加
MyJoystick.cs
public Transform stick;
  • transform.positionstick.position に置換
  • OnPointerDownの中身を実装
MyJoystick.cs
public void OnPointerDown(PointerEventData data)
{
    OnDrag(data);
}
  • 下図のような感じで設定

 1.PNG

 2.PNG 3.PNG

設定でJoystick.csの挙動と切り替えたいときはstickオブジェクトにJoystick.csを追加して

CrossPlatformInputManager.UnRegisterVirtualAxis()

とか呼んだ後にそれぞれのenable切り替えれば良いと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした