Unity

【Unity】数式で動くオブジェクトの実装【スクリプトで自動化】

さて#1の続編として、動く障害物を実装する例を紹介します。

#1で大まかにUnityを使ったゲーム開発の流れ・仕組みがわかったと思います。

●シーンにオブジェクトを配置して、
 各種機能をもつコンポーネント、
 プログラミング制御するスクリプトをアタッチする。

●ゲームの画面、ステージの数だけ、シーンを作成し、遷移させる。

という仕組みです。

さらにゲームを作り込み、個性を出していくために
本記事の内容にも、 ぜひチャレンジしてみてください^^

動く障害物の実装

ゲームオブジェクトが自動的に動くようにする方法は、
・スクリプトで制御する方法
・アニメーションを設定する方法
・物理挙動の動きに任せる方法
があります。

ここでは、 よりC#プログラミング学習のためになる
スクリプトで制御する方法を紹介します。

この制御方法について理解できれば、
あなたの数学力をゲーム開発に活かせるようになります。
(数学的に美しいゲームを作る第一歩...)

早速、障害物であるObstacleが動くように、
スクリプトObstacle.csに次のコードを追記します。

プログラミングのコードで表現すると複雑そうに見えますが、
数学的には大したものではありません^^;

MathfはC#で用意された数学的な機能です。
Mathf.PI(円周率π)やMathf.sin()をここでは使っています。

オブジェクトに往復するような動きを実装する場合、
Mathf.sinやMathf.cosを使います。

なぜなら、sinなどの三角関数は、必ず-1〜1の間の値だからです。
sinの()の値は、2πをかけることで、角度に変換され、-1≦sin()≦1となります。

ここでは時間の経過で増える数(Time.time)を自由に変更できるperiodで割って、
cycleという動きの速さに影響する値を制御しています。

cycleはMathf.sinの引数に入れられ、2πを掛けます。
すると、Msthf.sinは時間の経過ととも-1〜1を往復する値になります。

さらに、それに1を足して、2で割ることで、0〜1を繰り返すようにしています。

その後、Vector3であるMovementVectorに計算してきたMovemenFactor(0~1)をかけて移動する方向と移動量を決定します。
それを元のオブジェクトの位置(startPosition)に足して、実際に動かします。

 

Inspectorにて
MovementVectorが動く範囲・方向を自由に設定できるようになります。
動きの速さに影響を与えるperiodも設定できます。
([SerializeField]としたため)
これで、Obstacleごとに、異なる動きに設定できます。

その他、Obstacleを回転させたい場合は、次のコードを追記します。

1フレームごとに設定した値(角度)分だけ、
回転させるシンプルなコードです。

x軸回転なのか、y軸回転なのか、z軸回転なのか
設定できます。

回転という動きそのものが、繰り返す動きなので、
特にMathfを用いることもなく、実装が簡単ですね^^

 

というわけで、
オブジェクトが自動的に動くようになったはずです。

こういった数式を活用したスクリプトで、
数学およびゲーム開発をどんどん楽しんでいきましょう^^

ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA