読者です 読者をやめる 読者になる 読者になる

IT()で飯を喰う!

見習いSEが、気になるニュースや小ネタを書いていくブログ/はてなブログの方は相互RSS大歓迎でございます!

【Unity・初心者向け】タッチしたままだと勝手にシーンが切り替わるのを防ぐ方法

こんにちは。


最近はまっているUnityで、自分で開発している時につまづいたことを
一つご紹介したいと思います。

なお、今回は(というかこれからもほとんど)C#で書いております。
JavaScript使いの皆様、スミマセン。

例えば、こんな時に使える

ゲームオーバー画面から、タイトル画面に戻ったり。
クリアー画面から、メニュー画面に移ったり。
PCはキーが沢山ありますので、キー操作による分岐はしやすそうですが、

これがスマホなんかだと厄介。
タッチやスワイプに対応せにゃいかん。

実際のコードをご紹介

PC環境でプレイする際のシーンの切り替え方法は、こんな感じですかね。

using UnityEngine;
using System.Collections;

public class SceneChange : MonoBehaviour {

	//ここは何も書かない
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
			
	//Submit、つまりEnterキーでシーンを変更
        if (Input.GetButtonDown("Submit"))
        {
            Application.LoadLevel("SceneB");
        }
  }
}

Application.LoadLevel("切り替えたいシーン名")でシーンを切り替えていきます。
上のコードだと、Enterキーで変わっていきます。


void Update ()の中身を少しいじって、タッチ対応させたい。
こんな感じでどうでしょう。

	void Update () {
			
	//タッチ回数が0回より多い場合
        if (0 < Input.touchCount)
        {
            Application.LoadLevel("SceneB");
        }
 }

これだと、タッチ回数が1回以上の時は常にシーンが切り替わる。

もうちょっとこう、クリアー画面の余韻とか、ゲームオーバーした時の残念感を味わいたい。

ということで、以下の様にしてみました。

void Update () {

	//タッチ回数が0回より多い場合
        if (0 < Input.touchCount)
        {
            //タッチ開始時でないと次のシーンに移らない
            if (Input.GetTouch(0).phase == TouchPhase.Began)
            {
		//SceneBへ切り替え
                Application.LoadLevel("SceneB");
            }
        }
 }

TouchPhase.Beganという条件にすることで「指が画面に触れたその瞬間」という分岐を
作ることができます。

これなら、画面に指が触れたままシーンがどんどん変わっていくこともなくなると思います。



Unityのスクリプトリファレンスも参考にしてみてください。

docs.unity3d.com