本記事は『ナビつき!つくってわかる はじめてゲームプログラミング』ノードンガイド「自動運転プログラムのしくみ」の内容まとめです。
クルマの正面に壁があると自動で左右に避けて走る仕組みと、アクセルの自動化を解説しています。
自動運転のプログラム
追加条件:レッスン6のステップ5をクリアする
登場する主なノードン | ||
---|---|---|
クルマ | モノ | さわっているセンサー |
ゲーム画面には1台のクルマが停まっています。Yボタンを長押ししてクルマを前進させてみましょう。カーブするコースの壁が目前に来ると、勝手に右に曲がるようプログラムされています。
今回はこのように壁を勝手に避けて進む自動運転プログラムの解説です。
自動で壁を右に避けるプログラムは実にシンプル。まずコースを形づくる直方体のモノノードンたちがいます。それからクルマノードン、クルマを前進させるボタンノードン、クルマを撮影し続けるカメラノードン。そしてさわっているセンサーノードンです。
さわっているセンサーはクルマノードンの正面に連結し、直方体をチェックしています。すなわち、クルマが前進してセンサーが直方体のモノに触れると、さわっているセンサーがシグナルとして1.00の数を出力します。
次に注目したいのがさわっているセンサーとクルマノードンを繋ぐもう1本のワイヤー。センサーとハンドルポートを繋いでいますよね。さわっているセンサーの1.00という数はクルマのハンドルポートに送られ、クルマが右に曲がっていたというわけです。
- クルマの正面にくっついたセンサーが壁に触れる
- センサーから1.00の数がクルマのハンドルポートへ送られる
- クルマが右に曲がる
クルマが右に曲がるとセンサーが壁から離れることになるので、シグナルは出力されなくなります。壁があれば右に曲がり、壁がない時は真っすぐ進むということ。
さわっているセンサーの設定のふるまいの見えるをオンにして確認してみましょう。
クルマの正面にうっすらと見える白いワクがセンサーです。このセンサーが壁に当たるとクルマは右に曲がります。
左右に曲がれるようにする
今のままではクルマは右にしか曲がれません。左右に曲がれるようプログラムを改良しましょう。左右に曲がるために必要なことは何かというと。
- ハンドルポートにプラスの数が入力されると右に曲がる
- ハンドルポートにマイナスの数が入力されると左に曲がる
以上がクルマノードンのハンドルのルールです。プラスの数は入力できているので、マイナスの数をどうやって入力するかを考えなければいけません。
正解はさわっているセンサー2つを、クルマの正面に左右にズラしてくっつけ、片方のセンサーはプラスの数を、もう片方はマイナスの数を伝えるようにするです。
2つのセンサーを使えば、壁の向きによって違うセンサーが当たるようになるので、当たったセンサーによって左右どちらに曲がるかを決められます。
それではさっそく2つのセンサーを正しく設置してみましょう。
- 2体のさわっているセンサーをクルマの正面に左右にズラして置く
- 球のモノノードンをクルマの正面にれんけつする
- 左のセンサーをモノノードンにれんけつする(れんけつ面X+/X-)
- 右のセンサーをモノノードンにれんけつする(れんけつ面X-/X+)
今回はモノノードンを間に挟んで2つのセンサーを連結しました。左のセンサーはモノの左側にくっつき、右のセンサーはモノの右側にくっついています。つまりクルマの左斜め前と右斜め前にセンサーを取り付けたことになります。
ゲーム画面で確認すると、2つのセンサーがクルマの斜め前にきちんとくっついているのが分かりますね。
センサーの位置はこれでOK。次はクルマが障害物を避けて左右に曲がるようにプログラムしていきます。
左に曲がるにはマイナスの数をハンドルポートに伝える必要がありますが、さわっているセンサーはマイナスの数を出力できません。そこで今回は、引き算を使って数をマイナスにします。
- 「-」のけいさんノードンを呼び出す
- 左のさわっているセンサーをけいさんノードンの上ポートに繋ぐ
- 右のさわっているセンサーをけいさんノードンの下ポートに繋ぐ
- けいさんノードンをクルマのアクセルポートに繋ぐ
-のけいさんノードンは上ポートの入力から下ポートの入力を引き算した結果を出力します。さわっているセンサーはセンサーが対象に触れると1.00を出力し、何も触れていない間は0.00になるので、
- 左のセンサーが触れると「1-0=1」を出力
- 右のセンサーが触れると「0-1=-1」を出力
以上の計算結果がクルマのハンドルポートに伝わります。けいさんノードンの働きで、「左のセンサーが触れるとプラスの数、右のセンサーが触れるとマイナスの数を伝える」が実現できました。2つのセンサーに何も触れていない時は0.00のまま、クルマは直進を続けます。
クルマはYボタンで前進し、左のセンサーが壁に触れると右に曲がり、右のセンサーが壁に当たると左に曲がります。障害物を自動で左右に避けて進むプログラムの完成です。
アクセルも自動にする
- ボタンノードンを削除する
- 定数ノードンをクルマのアクセルポートに繋ぐ
ボタンノードンの代わりに定数ノードンを使えば、アクセルポートにプラスの数を入力し続けられます。これでアクセルも自動化できます。
最後に
最後に自動運転プログラムの要点をまとめておしまいです。
- 2体のさわっているセンサーノードンを使う
- モノノードンを間に挟んでクルマの斜め前にセンサーを連結する
- クルマノードンのハンドルは、プラスの数で右に、マイナスの数で左に曲がる
- 2体のさわっているセンサーを「-」のけいさんノードンに繋ぎ、計算結果をハンドルポートに送るようにする
- アクセルも自動化する時は定数ノードンが最適
大切なのはセンサーノードンの連結位置と、さわっているセンサーの出力をマイナスの数に変換するためのノードンです。この自動化テクニックは敵キャラクターを自動で動かす時にも使えます。
以上、ノードンガイド「自動運転プログラムのしくみ」の内容と解説でした。
れんけつ面の設定の確認はこちら。
ノードンガイドの一覧はこちら。
本記事に使用しているゲーム画像や著作権および商標権、その他知的財産権は、当該コンテンツの提供元に帰属します。© Nintendo
コメント