Unity

Unity備忘録、STG制作7:タッチパネル操作その2

※この記事は2016年当時に在籍していた某社内での(略)、結論から言うとVR事業は大大大失敗に終わった。取れると言っていた案件は数か月放置された挙句に失注、何の戦略もなく闇雲に作った自社制作VRアプリは悲惨なDL数、それが原因でボーナスカット、昇給も無し、人の話を全く聞かない&他人事の上役、当然だがこんな待遇ではソフト屋さんも営業も一人二人と去っていき、俺が辞めた時には某社におけるソフトウェア事業は設立3年を待たずに崩壊しましたとさ。教訓としては本業を疎かにして何の考えも無く新規モノにちょっかいだすと痛い目見るよ!ってことかな。

dl_kaisuu.png
個人製作アプリでもこんな悲惨なDL数見たことないわ。

という訳でこれが社内投稿最後の記事となりました。これがトラウマで一年以上Unityに触る気力が起きませんでしたorz
STG以外にも色々ネタ(VRとか)はあったんだけど、他のは公開する意義も気力も無いです。
じゃ、次からSTG制作再開と記事書下ろしを頑張るぞい!

背景

STG制作5でキャラをタッチ操作で動かせるようになったが、操作感がイマイチだったので別の方法を考えることにした。

やりたいこと

01.png

メリット:
(1)好きな場所をタッチできるので、オブジェクトが指で隠れて見づらいということが無くなる。
(2)ドラッグしたとおりにキャラが動くので、直感的に操作できる。

デメリット:
(1)特にない、と言いたいところだが、たまにドラッグ操作であることに気付かない人がいる(実際にテストプレイでそういう人がいた!)。そこは取説などでカバーする。
(2)常にドラッグ操作なので指が痛くなる。タッチペン推奨。

サンプルコード

Move.cs
    void Move(){
        if (Input.GetMouseButtonDown (0)) {
            //タッチ押下直後は座標のみ保存する
            screenPos1 = Input.mousePosition;
            worldPos1 = Camera.main.ScreenToWorldPoint(screenPos1);
        }

        if (Input.GetMouseButton(0)) {
            //タッチ操作中は前回タッチ位置との差分を取る
            screenPos2 = Input.mousePosition;
            worldPos2 = Camera.main.ScreenToWorldPoint(screenPos2);
            Vector2 touchDeltaPosition = worldPos2 - worldPos1;

            //キャラ移動
            transform.Translate (touchDeltaPosition.x, touchDeltaPosition.y, 0);

            //タッチ座標前回値を更新
            worldPos1 = worldPos2;
        }

    }

実行結果

意図通りの動きになり、操作性向上が確認できた。

参考サイト

http://gupuru.hatenablog.jp/entry/2014/05/21/192658