Unity入門 2Dアクションゲームを作るときに役立つ30のヒント

アイキャッチ 入門

Unityで2Dアクションゲームを作るときに役立つかもしれないヒント集です。

とりあえずサンプルで、こんな2Dアクションゲーム(ランゲーム)作ってみました。

2Dアクション

こちらでプレイできます。(音あり)初回起動時はロードがちょっと長め。
2DActionSample
Zキーで攻撃、Xキーでジャンプ。

素材は全部 AssetStore で手に入ります。

2Dアクションのヒント

背景・地形・ステージ関連

  1. マップチップのようなタイルセットでステージを作りたいときは、Tilemap を使う。

  2. タイルのピクセルと Pixels Per Unit を一致させると作りやすい。

  3. Tilemap Collider 2D でタイルに当たり判定を付ける。

  4. Tilemap Collider 2D + Composite Collider 2D + Rigidbody2D でタイルの判定を1つにまとめる。
    Tilemap Collider 2D の Used by Composite にチェックを入れる。

  5. 地形(当たり判定あり)と飾り部分(当たり判定無し)は、Tilemap を分ける。

  6. タイルごとに当たり判定を調整したいときは、Sprite Editor の Custom Physics Shape で設定する。
    (タイルの Collider Type が Sprite のときのみ)

  7. 下からすり抜ける床を作りたいときは、Platform Effector 2D を使う。
    Tilemap Collider 2D or Composite Collider 2D の Used by Effector にチェックを入れる。

  8. 背景はカメラの子オブジェクトにすればOK。(縦方向へのスクロールがない場合)

  9. 背景をスクロールする場合は、1ループ分を親オブジェクトにセットし、
    親オブジェクトを移動させるとループが楽チン。

  10. 多重スクロールは、カメラの移動量に対して、各背景レイヤーの追従率を変化させる。

アニメーション関連

Animator を使う時の自分ルールです。

  1. Animation ファイル名は、Hero@Run のように、どのキャラ用のアクションか明示する。

  2. ジャンプ上昇→頂点→下降のように、一連のアニメーションを行うものは、
    サブステートにまとめて同一ステートとして扱う。

  3. 遷移条件に Trigger を使う時は、単独で使う。他の条件はつけない。
    遷移できなかったときにリセットしなきゃいけないのがめんどくさいから。

  4. AnyState からの遷移条件では、Can Transition to Self のチェックを絶対に外す。

  5. 2Dの場合、アニメーションをパッと切り替えたいので、Transition Duration と Offset は基本 0。

  6. アニメーションイベントを設定すると、任意のタイミングでスクリプトの関数を呼び出せる。

  7. ステートの遷移は同じで、アニメーションだけ変えたいときはAnimator Override Controller を使う。

キャラクター関連

  1. キャラクターには、地形との衝突用の判定と、攻撃判定、やられ判定の3つを用意する。

  2. 攻撃判定発生のタイミング、やられ判定のサイズ変化などはアニメーションで制御する。
    特定のモーションの、数フレーム間だけ無敵みたいなことがやりたいときに楽。

  3. 地面に接地しているかは、BoxCastで調べる。

  4. ダメージを受けたときなど、特定のタイミングでなにか実行したいときは
    UnityAction などで設定しておく。

  5. 死んだらRigidbody2Dやコライダーは全部切る。

  6. 敵が画面外に行ったら即死させたいので、敵を Destroy するコライダーを用意しておく。

  7. 見た目やパラメータが違うだけのキャラクターたちは、ベースとなるキャラのプレハブを作り、
    そこからプレハブバリアントを作り、変更したい部分を設定する。

  8. カメラがキャラを追従する場合、カメラの座標更新は LateUpdate で行う。

  9. gameobject.layer はインデックスなので、LayerMask との比較は 1 << layer でやる。

その他

  1. 効果音は、効果音を鳴らすだけのオブジェクトをプレハブ化して使うと便利。

  2. DontDestroyOnLoad でオブジェクトを指定するとシーンを切り替えても破棄されない。

  3. Dictionary は inspector に表示できない。

  4. プロジェクト内に全角文字を含んだファイルやディレクトリが一切なくても、
    ユーザーフォルダが全角文字を含んでいると、WebGLのビルドでエラーが出て失敗する。

こんなところですかね。

個人的なルールが多いですが、なにかのヒントになればうれしいです。

以上。おしまい。



コメント

タイトルとURLをコピーしました