お久しぶりです。去年入社致しました、ウエムラです。

1月に開催された、世界で開かれているグローバルゲームジャムに参加してきました。
初めての参加なのでびくびくしてましたが、とても楽しかったです!
できた作品:ゲームジャム作品
(私の担当した部分は[結果画面]で、あまり役に立っていませんが…)

さて、今回はゲームに使える数学についてです。
ゲームを作る上で数学は避けては通れぬ道…
私は数学が全然得意ではありませんが、そんな私も調べながらであれば少しは出来るので、記事にしてみようと思いました!

最近、本格的にUnityを始めたので、Unityで書いていこうと思います

素材はこちらを使っていきます。(見た目を変えるだけなので、なくてもOKです!)
アセット素材

追尾

どんな用途に使うか?(参考)

・敵の移動
・敵の攻撃
・カーソルのエフェクト

追尾は色々なゲームで使いますが、主に上記であげた内容で使うと思います。
なくてもゲームは作れますが、あればとても面白い動きを実現できます!
では、早速やっていきましょう!

下準備としてこんな感じに配置してみました。
(ひよこは気にしないでください…メモ帳です…)

続きを読む


Unityでゲームの追尾をプログラミング

エネミーを配置してみる

まずは敵のオブジェクトを作りましょう。
1. 2D Object -> Sprite でオブジェクトを作ります
2. 名前をわかりやすい名前に変更(私はEnemyにしました。以下EnemyObjで説明)
3. EnemyObj の Sprite Renderer に 画像をくっつける
4. EnemyObj に Rigidbody2D を追加する
5. Rigidbody2D の isKinematic にチェックを入れる

私の場合、こんな感じになりました。
敵を配置

エネミーにスクリプトをつけてみる

では、追尾させるスクリプトを組んでみましょう!(C#で進めていきます)
スクリプト名は Enemy.cs としました。

一旦ここまで作ります。
UnityEditor側に戻り、EnemyObjにこのスクリプトをアタッチしてみましょう!
Unity Editor
(ここまで、作ってもまだ動きません)

追尾移動(RigidBody無し)

それでは早速、追尾を実装してみますが、いくつか方法があるので試してみたいと思います。
では、Enemy.cs の void NormalMove() に処理を追加してみましょう!

2つのパターンを書きましたので、お好みで。
Mathf.Atan2を使う方法は、角度からターゲットの方向に移動させています。
Mathf.Atan2を使わない方法は、ベクトルを計算、正規化をして移動させています。
Unity Mathf.Atan2

追尾移動(RigidBody有り)

void Update() にある NormalMove() はコメントアウトしてください。

RigidBodyをつけるともっと簡単に実装することができます。
では、早速処理を追加してみます。

RigidBodyを使うことで、結構楽に実装できたりします。
.normalized を使うことで簡単に正規化することが可能です。

おまけ

おまけで角度もつけてみたいと思います。
今だと同じ方向を向いたままですが、角度をつけることで動きがそれっぽくなります。
(記事2がとてもわかりやすかったので使わさせていただきました!)

Mathfクラスを使うと、自分で計算を書く必要がないのでとても楽ですね!
Quaternionクラスに便利なものが結構あるので、調べてみてもいいかもしれません。
Mathfクラスを使うと便利
画像をミサイル等にすると、カーソルに追尾している感じが出て味が出ると思います。
おまけはここまでです。

まとめ

今回はそれなりに簡単な追尾の仕方を書かさせていただきました。
次回は、シューティングゲームの弾で使う初歩的な数学等?書けたらと思います。(未定です)
数学が苦手な方も調べながらであれば、できるはずですので、一緒に挑戦して克服していきましょう!

記事をご閲覧頂き、ありがとうございました!

参考サイト/素材サイト

あわせて読みたい記事