様々な移動パターン1

UnityのMathfスクリプトを使用して敵の円運動移動を作って見たところ、そもそも制作中のゲーム全体の移動パターンを増やせそうだと気付きメモを残しておきます。

ブログ更新は移動パターンが増えるたびに増えていく予定です。

using unity;

float speed = 5;
float circle = 5.5f;

void FixedUpdate()
{
  float xPos = Mathf.Cos(Time.time * speed) * circle;
  float yPos = Mathf.Sin(Time.time * speed) * circle;

  Rigidbody.velocity = new Vector3(xPos, yPos, -speed);
}

上記コードを使用すると円運動を行いながら、プレイヤーに向かってくる敵の挙動が出来ます。
Rigidbody.velocityの「-speed」を「speed」に変えるとプレイヤーからのショットやスキル攻撃の移動パターンを増やせそうです。

簡易的な波移動

タイトル通りのとても簡易的な波移動のプログラムをメモしておきます。
あまりにも簡易的な為、細かい移動と組合せたい場合はしっかりと数学で使う処理を入れるのが良いです。

using UnityEngine;

float speed = 5.5f;
bool courseX = true;

void FixedUpdate()
{
    if (Core.EnemyObj.transform.position.x <=-4)
    {
     courseX = true;
    }
    else if (4 <= Core.EnemyObj.transform.position.x)     
    {
         courseX = false;
     }

     if (courseX)
     { 
        this.Rigidbody.velocity = 
             new Vector3(speed,Rigidbody.velocity.y,-speed);
     }
     else
     { 
       this.Rigidbody.velocity = 
             new Vector3(-speed,Rigidbody.velocity.y,-speed);
     }

}

Unityで動かす前提の為、記事で公開しているコードと実装は多少変わりますが、基本的な動きの違いはありません。

上記コードのままだと、敵の初期配置とスピードで波の間隔が変わります。
簡易的に波移動をさせたい時のコードなどで、実際に制作するときは、クォータニオンやオイラー角を使用してください。

移動パターンの初期化

敵の移動パターン処理で敵が倒される、もしくは特定距離まで移動後消えてから再配置される時にステータスを初期化します。
その時、移動パターンの数値が消される直前のままな事に気付きました。

修正前
int MoveID; ←このパターン値を直接参照させて変更していた。

修正後
int MoveID;
int ChangeId; ←直接扱う変数を追加
ChangeID = MoveID; ←初期化

このまま、初期値を変更してしまう事態に気づくのが遅れてしまうと修正でとても手間がかかるところでした。

基本的なコードの書き方を定期的に忘れないようにメモとして残しておきます。

移動パターンを別視点から

敵エネミーの移動パターンを少しわかりやすくする為ゲーム内では見えない視点から撮りました。

真横からの撮影

敵が上下に移動する様子が判りやすくなったと思います。
初期のステージでは敵は上下左右移動しますが敵からの攻撃は真っ直ぐに飛ぶようにしています。

今後も、ゲームプレイでは見られない撮影をアップできればと思います。

敵エネミー移動パターン追加2

ステージ1エネミー

新たにWorldステージ1の敵エネミーの移動処理の変更とパターン追加を行いました。

移動処理については下記の記事をご覧ください。
https://prehistoriccenozoic.com/blog/game-create-progress/enemy-movepatarnsetting2

今回の修正で、チュートリアルステージとWorldステージ1では、敵の基本移動パターンに慣れて貰う構成にしています。
本シューティングゲームの基本システムの視点変更を活用できるような動きを序盤に慣れて貰う事も考えています。

簡単なゲーム説明

敵が上下移動する場合は、背後視点が有利で、敵が左右移動する場合は上空視点が操作しやすくしています。

視点移動がどうステージ進行有利になるのかを体験できる仕組みになっていると思います。

敵エネミーの移動パターン追加

現在の移動パターン

チュートリアルステージの敵移動パターンを見直し修正を行いました。
これまでの制作ゲーム内の敵移動パターンが少なすぎると考え、移動処理を敵本体のクラス内のメソッドで扱える様にしています。
本当のクラスや実装を考えると、もっと分割すべきだとは判っていますが、個人で作る場合、スクリプトの種類が増えると把握する事が難しく危険性と見易さを考慮して、移動パターン用のメソッド内で所為を簡潔する事にしました。

新しいクラスを作る時でも影響範囲を最小限に留め、再修正も出来るようにしています。

もっと詳しい内容は、後日動画とブログで補完予定です。

新作動画もお楽しみに!

動画はこちらから↓
YouTube
https://youtu.be/KaNKg7zJFgo

ニコニコ動画
https://www.nicovideo.jp/watch/sm38134287

ブログの活性化させる事について

更新頻度の上昇に向けて

今月からブログの定期更新を意図的に行って見ました。
2週間試して、水曜日の定期更新とその日以外の記事更新だけですが、もう少し頻度上げても大丈夫なのでは思い、更新頻度を気持ち上昇させます。

主なブログ内容

  • ゲーム制作の進捗報告
  • 投稿動画の補完記事
  • 制作学習目的のメモ記事
  • new:制作以外の記事

新たに、制作に関係のない記事もこちらのブログに追加します。
制作に関係の無い記事カテゴリは別けるので、後からでも見やすくなるかと思います。

頻度の向上を目指して頑張ろうと思います。

UnityでのDelegateメモ

今回は、UnityのC#で使うDelegateとActionとFuncについて自己流解説を行います。
なぜ、いきなりDelegateの話を始めたのかは下記動画をご覧ください。

YouTube
https://youtu.be/KaNKg7zJFgo

ニコニコ動画
https://www.nicovideo.jp/watch/sm38134287

進捗報告動画で、敵の移動処理変更を行った時、DelegateとActionについての説明を省き、ここで説明するようにしました。

Delegate(デリゲート)とは

デリゲートの意味を調べると、メソッドを変数のように扱う機能と書かれることが多いです。
デリゲートの使いどころを、自分の制作に当てはめると以下のコードのようになります。

テストスクリプト1

テストスクリプト2

上記の書き方で何がいいのかを、ゲーム制作の進捗動画内容にあわせると、

・移動処理のパターンを敵の種類ごとに作れる
・修正や不具合の発見が行いやすく、影響範囲が小さくできる

個人で制作する上で、見やすくなって移動処理を作りやすくなるメリットになります。

ActionとFunc

ActionとFunc機能は、デリゲートの宣言を簡略化できるものと説明される事が多いです。
下記のサンプルコードをご覧ください

基本となる移動処理

移動スクリプト

エネミーの場合

エネミー移動処理

プレイヤーの場合

プレイヤー移動処理

大まかには、Actionは戻り値が無く、Funcは戻り値があるという違いがあります。
制作のコードではActionを良く利用しています。

終わりに

今回は動画内容の補完としてブログでコード解説を書いてみました。
自分で解説出来る範囲での記述ですので、間違いなどがあれば教えていただければ幸いです。
今後も、動画の補完解説を行っていければと思います。