楽しく学ぶUnity 2D超入門講座(2/9)

教則本

Chapter4 キー入力と衝突判定

キー入力に反応するスクリプトと衝突判定(当たり判定)を学んでいきます。

Chapter4.2 キー入力スクリプト

キー入力移動のスクリプト内では、
Update」クラスにキー入力指定、「FixedUpdate」クラスに物理移動を指定します。

スクリプトを書いていくとUnityでは「GetComponent」命令をよく見ることになります。
最初はそういうものなのだとよく理解していませんでしたが、
Unity画面の右側にあるインスペクタウィンドウ「コンポーネント」部分を各自で指定していることだと分かると、腑に落ちました。

↑↓SpriteRendererコンポーネントの「flip」部分を記述で指定していることが分かります。

インスペクタウィンドウ内のコンポーネントで指定したり、スクリプトからコンポーネントを直接指定したりと、
2つのやり方を使い分けていく感じのようです。

インスペクターの説明(に限らず)はweb上の「Unityマニュアル」で確認することができます。
※新しいのは日本語に訳されてない場合あり。

Chapter4.3 衝突判定(当たり判定)

衝突判定には「リジットボディ」と「コライダー」の2つのコンポーネントを使用します。
リジットボディ」は衝突や落下などの物理的な動きをさせるコンポーネントで、
コライダー」は絵に衝突の範囲(サイズや形)を設定するコンポーネントです。

Chapter4.4 スプライト(絵)のキー移動

スプライトを移動させる手段はいろいろあり、
transform.Translate」を使用した場合は移動が「ワープ」になるのでやめた方が良いとの情報を得ていましたが
それについてここで解説されていました。

Rigidbody2D移動速度を指定する方法をとると良いようです。

<Rigidbody2D>().velocity = new Vector2(5,0);

Chapter4.5 スプライト(絵)がスプライト(絵)を追いかける

GameObject <目標のオブジェクト>;
<目標のオブジェクト> = GameObject.Find(<目標の名前>)

目標を見つけたり、方向を求めて敵がプレイヤーに向かうようにできます。
GameObject.Find多用は重くなる。らしいので、いつかのために覚えておきます。

そして本書とは関係ないのだが、ここでスクリプトをいじっていて問題発生。
アタッチしてもスクリプトが反映されない現象にみまわれ時間を取られました。
原因は「VisualStudio」が2つ起動していたことでした(たぶんスクリプトを重ねて呼び出した?)。
修正保存したファイルは指定ファイルではなかったため、いくら修正しても適用されずでした。
片方を消し、あらためて修正ファイルを指定することで問題解決です。
気を付けるべし。

Chapter4.7 衝突したらゲームをストップ

一定時間ごとにずっと実行している「FixedUpdate」を停止させるには「Time.timeScale」を使います。

Time.timeScale = 0;

動かすときは「1」に。

ゲームの時間を止めるとリプレイしたときにゲームが止まったまま始まることになるため、最初に時間を動かす処理をしておくのが良いようです。

プレイヤーに接触で時間は止まったが、敵の向きも一瞬で反転した。
プレイヤーに当たったときは反転しないようにしてみる。

Chapter4.8 衝突したら ~する

敵がプレイヤーに当たったらプレイヤーが消えるようにしてみます。

次に、
敵がプレイヤーに当たったらゲームオーバーを表示させるようにします。
敵オブジェクトに複数のスクリプトをアタッチしていきます。
動きのスクリプトをバラバラにしておいたほうが管理はしやすくなりそうです。
(同一巨大ファイルまたは細分化ファイル問題)

キャラクターにアタッチしていくか、大勢の各敵にアタッチしていくかでも管理などが変わってきそうです。

この章の最後に「追いかけゲーム」というサンプルゲームがあります。

ゲームのルール

  • オバケがプレイヤーを追いかけてくるので、逃げるゲーム。
  • 衝突したらゲームオーバー。
  • プレイヤーが宝箱に衝突したらゲームクリア。

必要なスクリプト

  • 上下左右キーを押したら、移動する。
  • ずっと追いかけられる。
  • 衝突したら何かを表示する。
  • 衝突したらゲームをストップする。

複数の敵キャラ登場を想定すると、1対1での挙動にするべきではないことが注意点のようです。
これについての対応も軽く触れられています。

ゲームの基本 追いかけゲーム

プレイヤーのキー操作。敵の追いかけ。衝突時に~する。
プレイヤー操作ゲームの基本を学ぶことができました。

コメント