3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NCCAdvent Calendar 2018

Day 10

ジョイスティックを使ってキャラクターを操作する

Last updated at Posted at 2018-06-02

#ジョイスティックとは?
レバーによって方向入力が行える装置のことですが、

cap7.PNG

ここでは上の画像のように、丸を動かしてキャラクターを操作できるやつのことを指します。ジョイスティックの導入と、キャラクターがジョイスティックを動かした向きを向くようにする方法を初心者向けに解説していきます。

#ジョイスティックの導入方法
なんだかとっても大変そうですが、
Asset Storeに無料で提供されているSimple Touch Controllerを使えば簡単! まずはこれをImportしましょう。
cap6.PNG
SimpleTouchControllerに同封されているSceneのExample1~3を参考にしましょう。Exampleでは球を動かすLeftControllerとカメラを動かすRightControllerが搭載されていますが、今回はプレイヤーをバーチャルパッドで動かせるだけなので、LeftControllerのみ使えるようにすれば良いです。
では、どんな操作が必要だったのか説明していきます。

SimpleTouchController>Scenes>Example2を開き、Left SimpleTouch Joystickをコピーして、使いたいシーンのCanvasにペーストします。

これを
cap8.PNG

ここに持ってくる!
cap10.PNG

次にプレイヤーにPlayerMoveControllerをつけます。
cap12.PNG

このまま実行するとRight Controllerがないためにエラーになったり、
プレイヤーが正面を向いたまま移動したりしてしまうので、コードを少しいじります。(記事の一番下にPlayerMoveControllerをいじったコードが置いてあります。)
今回使うのはLeft Controllerなので、Right Controllerに関係する式は取っ払ってしまいましょう。
プレイヤーの向きをジョイスティックにと連動させる命令は、
//スティックの倒れた向きを向く の下に書かれているコードで制御しています。

float v2 = leftController.GetTouchPosition.y;
float h2 = leftController.GetTouchPosition.x; ```
v2とh2にそれぞれ、Left Controllerのy軸の値とx軸の値をとり、

```if (v2 == 0 && h2 == 0) {
			speed = 0f;
		} else {
			speed = 10f;
		}```
あとLeft Controllerを動かしていないときはspeedが0になるようにしましょう。
勝手に動いてしまいます。

```Vector3 direction = new Vector3(h2,0,v2);
transform.localRotation = Quaternion.LookRotation (direction);```
向きを代入してあげています。

なお、以下のコードには取っ払い損ねているものもありますが、動きには影響ないです。

```C#:PlayerMoveController
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]

public class PlayerMoveController : MonoBehaviour {

	// PUBLIC
	public SimpleTouchController leftController;
	public SimpleTouchController rightController;
	public Transform headTrans;
	public float speed;
	public float speedContinuousLook = 100f;
	public float speedProgressiveLook = 3000f;
	public GameObject Message;
	// PRIVATE
	private Rigidbody _rigidbody;
	[SerializeField] bool continuousRightController = true;

	Animator animator;

	void Awake()
	{
		animator = this.gameObject.GetComponent <Animator> ();
		_rigidbody = GetComponent<Rigidbody>();
	}

	public bool ContinuousRightController
	{
		set{continuousRightController = value;}
	}


	void Update()
	{
		// move
		if (Message.activeSelf) {
			speed = 0;
		}else{
			speed = 10f;
		}
			_rigidbody.velocity = new Vector3 (leftController.GetTouchPosition.x, 0, leftController.GetTouchPosition.y) * speed;

// スティックの倒れた向きを向く---------------------------------
		float v2 = leftController.GetTouchPosition.y; //y軸方向の値をとる
		float h2 = leftController.GetTouchPosition.x; //x軸方向の値をとる
		Debug.Log (v2 + ", "+h2);
		if (v2 == 0 && h2 == 0) {
			speed = 0f;
		} else {
			speed = 10f;
		}

        //ジョイスティックが傾いている方向を向く
		Vector3 direction = new Vector3(h2,0,v2);
		transform.localRotation = Quaternion.LookRotation (direction);

		// WalkingFlag
		if (speed == 0f) {
			Debug.Log (speed);
			animator.SetBool ("WalkingFlag", false);
		}else{
			animator.SetBool ("WalkingFlag", true);
		}

	}

	void UpdateAim(Vector2 value)
	{
		if(headTrans != null)
		{
			Quaternion rot = Quaternion.Euler(0f,
				transform.localEulerAngles.y - value.x * Time.deltaTime * -speedProgressiveLook,
				0f);

			_rigidbody.MoveRotation(rot);

			rot = Quaternion.Euler(headTrans.localEulerAngles.x - value.y * Time.deltaTime * speedProgressiveLook,
				0f,
				0f);
			headTrans.localRotation = rot;

		}
		else
		{

			Quaternion rot = Quaternion.Euler(transform.localEulerAngles.x - value.y * Time.deltaTime * speedProgressiveLook,
				transform.localEulerAngles.y + value.x * Time.deltaTime * speedProgressiveLook,
				0f);

			_rigidbody.MoveRotation(rot);
		}
	}
}

これで動くはずです。
お疲れさまでした!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?