タップでキャラクターが動くようにしてみた

シェアする

  • このエントリーをはてなブックマークに追加

前回のアイテム消える時にエフェクトつけてみたで、だいぶゲームっぽくなってきました。
そろそろ、パソコン以外でもプレイできるように……スマホで動くようにしてみましょう!

……が、現状、カーソルキーでしか動かすことができません。
スマホにはカーソルキーがないので、タップで操作できるようにしたいと思います。

軽く調べたらものっそいコードばっかり出てくるので、できるだけ楽そうな方法を捜索。
コードはできるだけ書きたくない……(笑)

今回は、プレイヤーが指示した方向へ向かって移動する、MMOやRTS等でよくある移動方法をMMDモデルで行う手っ取り早い方法を紹介します。 「若干自分の思ってたものと違う」と思う所があれば、パラメータやソースコードを調整して下さい。一応、ノーコーディングでもここまでは出来ます。 もしキーボードやゲームパッドで移動させたい...

うろうろと探し続け、こちらのサイトで「Navmesh」という機能を知りました。
おお、すごい! 歩ける場所を指定して、そこまで移動できるなんて。
立体的なフィールドの時にめちゃめちゃ使えそう。

平たいフィールドだけど、とりあえず設定してみました。はみ出てるけど気にしない。

SampleアセットがStandardアセットになってたりとちょっと混乱しながらも、いろいろと設定。

AI搭載のサードパーソンさんの表面だけを、サクっとケニーに置き換え。
AIがこんなに簡単に使えるなんて凄いわぁぁぁぁ。

……と、喜んでいたらなんかエラーメッセージが大量に出て動かなくなりました。
どうやら、インポートしたコードに古いのが混じっていて、エラーが出ているもよう……?

エラー吐いたものをぽちぽちと地道に消去。
……なんでもかんでもアセットをインポートするのは良くないんですね……調べ物するときも、できるだけ最新情報で検索かけていかないとなぁ。

うっかり必要なものまで削除しちゃったりして、インポートと削除を繰り返しながら、なんとかタップしたところまで歩いてくれるようになりましたー。

……が。

タップ領域がでかいよぉぉぉぉぉ。
うまく操作できないよぉう。

変更方法をGoogle先生に聞くも、答えてくれず。
マイナーな機能なの? それとも検索ワードがいけないの? 頼むよGoogle先生……。

仕方ないので、コードを見ながら自力で解読していきます。
2つある Platform Specfic Content(Script) は、ターゲット画像の表示みたいなので、もういっそチェックボックスをオフにして非表示に。

マウスの動作をしているっぽい Place Target With Mouse(Script) のコード、PlaceTargetWithMouse を開いていきます。

どうやらカメラからrayという光線を発射して、それがぶつかったところを読み込んでいるみたいですね。

マウスをクリックした時だけでなく、押しっぱなしにしている間中動いて欲しいので、GetMouseButtonDown のDownを取っ払って、GetMouseButtonにしました。これだけでもだいぶ操作性上がった。

rayの半径を小さくすれば、きっとクリック範囲も狭めることができるんじゃないかなーと、とりあえずデバッグ用にコードを追加。
半径とかの前に、いったいどこから光線が発射されて、どこへ届いているのか。一度目で確認をしておかなくては。

やってみて分かった。カメラが真上じゃない上に離れていて、クリックした場所にrayが届いていない!!(サーモンをクリックしても、手前で止まってました)
rayって、本体カメラから出てたのか……! ray専用カメラがどこかにあるのかと思ってた!!

しかし、カメラ位置を変えてしまうとケニーが見えなくなります。
どうやって調整したらいいのか、まったく分からず……

と、とりあえず! GetMouseButtonDown直しただけでだいぶ操作は楽になったから、まぁいいか!

もうちょっと理解が深まったらまた挑戦してみようかと思います。
だって、これだけでまた4時間経過してるんだもの……。

というわけで、次の作業に……

次の作業に…………

移らないのが、諦めの悪い人間です。どうしても気になる……。

なんか、挙動を見ていたら、Rayの位置が上手く行っててもキャラクターが動いて居ないことに気がつきました。
これ、Rayで送ってるTargetの値の問題じゃ無い。受け取り側の問題だ。

きっと、ある程度以下の距離のときは動かないっていう処理が書かれて居るはずなのだけど……どこがそれに該当するのか分からない~!!

ぽちぽちと、辞書片手に和訳しながら解析開始です。
こーゆーとき、ほんと英語力が欲しい。

頑張って解読して、if ((target.position – targetPos).magnitude > targetChangeTolerance)が怪しいと言うことが分かりました……が、ベクトルって何ーーー?!

こーゆーとき、自分の数学力が恨めしくなります。学校の勉強って、なんだかんだで意外と大事だった……。

Rayの大きさでターゲットの座標が上手く取れていないのだと思うのだけれども、分からん……。

もしかしたら、床のメッシュの荒さも関係ある??

8時間、丸2日かけても解決しなかったので、いい加減諦めたいと思います……。とりあえず、離れた場所をクリックすれば動くんだ!

これ、最初から自分でコードを書いていれば勉強になったし、解決も早かったのかもしれないですね……。ぐぬぬぬ。

次回から、ちゃんとコードを理解して書く方向で行きたいと思います。
とりあえず、動きの方はコレで完了!

次はオープニング画面を作って、いよいよ動かしてみたいと思います!

前回、ものすごく苦戦しながらもなんとかタップで動くようになったサーモン集めゲーム。 いよいよ、実際にスマホでゲームができるよう...

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。