FC2ブログ

記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサーリンク

Tiledで作ったマップを駆け回ってみる その4 ~歩け、ゴマ!~

 こちら前回記事

プレイヤー君一人だけだと寂しいので、キャラクターを追加してみます。
一緒に操作するのは忙しいし自動で歩かせてみよう!
ということで


hone_01.pnghone_02.pnghone_03.png

新キャラクター、ホネホネ君です。
同じ画像に見えますが少しずつ違っています。
まずは3枚の画像をアセットに追加しましょう。


Unity 160921 5


アセットへ追加したら画像のようにしてヒエラルキーにドラッグ&ドロップで追加します。
アニメーションファイルを自動で作成してくれますので、適当なフォルダに保存。
再生ボタンを押してみると、ホネホネ君が動きますね。かわいらしいでしょう?

このホネホネ君にも前回のプレイヤーと同じようにBox Collider 2D , Rigidbody2D コンポーネントを追加しましょう。
ここまで準備できたらいよいよスクリプトを書いていきます。

スクリプトファイルを作成、ホネホネ君にアタッチ。
ホネホネ君を自動で歩かせるには

・乱数を生成、生成した値に従って方向、距離を決めて歩かせる

という方法でやってみます。
簡単なようですが、細かいところをキチンとしておかないと変な挙動になるのでご注意。

まずは変数の準備を

int way; //方向決定用乱数を代入
int val; //距離決定用乱数を代入
float speed = 0.02f; //1移動の距離 小さい方が自然な動きになります。
float waitT; //移動間の待機時間用乱数を代入


詳しくは処理の部分で書きます。
では次に乱数生成処理です。

毎フレーム実行する必要はないので、新しく関数を作成します。

void RandomN(){
way = Random.Range(0,4);
val = Random.Range(0,10);
waitT = Random.Range(0f,0.2f);
StartCoroutine("Walk");
}

Random.Range()で乱数の生成ができます。
way = Random.Range(0,4); の場合0~3の中でランダムな数値をwayに代入、という処理になります。(4は含まない)
wayが4通り、つまりこの値にしたがって移動方向を上下左右のいずれかに決定するわけですね。

valは合計移動距離を設定するための乱数を代入します。
一度に大きな距離を移動するとワープしたようになってしまうので、数回に分けて移動させます。

waitTは移動と移動の間に待機時間を設定するための乱数を代入します。
少し待機時間を設けることで落ち着いた挙動になります。

StartCoroutine("Walk");

これはコルーチンというものを呼び出す処理です。
コルーチンというのは途中で処理を止めたり、再開したりすることができる関数のことです。
今回は処理途中で待機時間を設けたかったのでコルーチンを使っています。

次は生成した乱数を使って、ホネホネ君を歩かせる処理です。

IEnumerator Walk(){
switch(way){
case 0:
for(int i=0;i<val;i++){
transform.Translate(speed,0,0);
yield return new WaitForSeconds(waitT);
}
break;
case 1:
for(int i=0;i<val;i++){
transform.Translate(speed,0,0);
yield return new WaitForSeconds(waitT);
}
break;
case 2:
for(int i=0;i<val;i++){
transform.Translate(0,speed,0);
yield return new WaitForSeconds(waitT);
}
break;
case 3:
for(int i=0;i<val;i++){
transform.Translate(0,speed,0);
yield return new WaitForSeconds(waitT);
}
break;
}
RandomN();
yield return null;
}

少し長いですね。
中身はswitchとRandomN関数の呼び出しです。
生成した乱数wayに従ってswitchで移動方向を決定します。

次に決定した方向にforを使ってval回だけ移動します。
transform.Translate() はプレイヤーの移動にも使っている処理ですね。

forの中で移動処理の後、一時処理を止めています。
yield return new WaitForSeconds() というところですね。
コルーチンの便利機能で、処理を指定秒数止めておくことができます。

移動処理が終わったらRandomN関数を呼び出しています。
RandomN関数からコルーチンを呼び出していますから、ループ処理ということになりますね。

ここまででほとんど完成です。
あとはStartでRandomN関数を呼び出すようにしておきましょう。

void Start () {
RandomN();
}

Startはスクリプトが読み込まれて最初に一度だけ実行されます。
最初に一度RandomN関数を実行してしまえば、あとはループに入りますので勝手に歩き回ってくれますね。

再生してみるとホネホネ君が自由に歩き回っているはずです。
かわいらしいですね。
speed,val,waitTの値を(乱数の生成範囲を)いじってみるとおもしろいですね。

では今回はここまでにします。
ありがとうございました。

スポンサーサイト

スポンサーリンク

コメント

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。