Unityのお勉強~Mathf.Repeatを使ってみる~

はいどーも発狂しかけのニートですこんばんは。
みなさんUnityってますか?
たぶん僕のブログの読者はツクラーが多いのでUnityってないと思いますが、本日はUnityの記事です。

複雑な計算の処理方法を比べる

ゲーム作りには(僕から見れば)複雑な計算が必須です。
ツクールMVはその計算部分を隠蔽することでユーザーフレンドリーな作りになっています。
要は別に「何をおこなうのに複雑な計算が必要なのか」を知る必要はないということです。

一方でUnityは複雑な計算を隠蔽するのではなく、代替してくれます。
例えば円同士の当たり判定ですが、これを自作しようとするとめちゃくちゃ面倒なんですよね。
小卒並の算数知識もない僕では解説サイトを見ても理解不能です。
ですがUnityは当たり判定の計算を代替してくれるため、マウスでポチポチとするだけで当たり判定が完成します。

ツクールは「複雑な計算が必要なことすら知る必要がない」のに対し、Unityは「複雑な計算式を一から組み立てなくてもいいように、便利な機能を用意してあげてますよ」という感じでしょうか。

Mathf.Repeatくん

当たり判定以外にもUnityには便利な機能が多く用意されています。
すぐ目につくのは物理演算でしょうが、これほど大規模なものを論じるには僕の知能がサルで不可能なので、もっと小さいことをここでは取り扱います。
今回はずばりMathf.Repeatです。
これを使うとメニューを作るのが微妙にラクチンになります。

メニューの作り方

みなさんがゲームで利用する縦に長いメニューは通常、上下キーで移動しますよね(スマホゲーは知りません)。
このとき、一番下のアイテムを選択中の場合、さらに下キーを押すと一番上に移動しますよね。少なくともツクールはそうなっているはずです。
また、一番上のアイテムを選択中の場合に上キーを押すと一番下に移動するはずです。
ツクラーのみなさんは「それがどうしてん」と思うかもしれませんが、この処理には若干面倒な計算が必要です。
少なくとも僕のような小卒レベルの算数知識では、教えてもらわなければ一生気づかないであろう計算式です。
具体的にはこちらのサイトをご覧ください。
http://dixq.net/g/03_04.html

読めばわかる通り、下キーを押した場合のループと上キーを押した場合のループでは計算式が違います。
ツクールの内部でもこれと似たような計算をおこなってループさせています(計算式の部分は見てもわからないので斜め読みしかしていないので、正確ではありません。なんかもうちょい複雑だったかも)。

Unityではどう作れるか

Unityでも上記の方法は当然使えます。
使っても全然問題ないです。
ですが、ぱっと見なにをしているかわからない計算式を書くよりも、Unity用意されている便利な機能を使ったほうがよいでしょう。
ちゅーわけでMathf.Repeat()くんのご登場です。
まずはコードをご覧ください。

Mathf.Repeat(float t, float length)は指定した値tを0~lengthの間でループさせ、float型の値を返します。
今回はint型にキャストしていますが、浮動小数点数も使えるということですね。
this.MaxMenuNumはメニューの最大数です。
つまり、メニューの最大数までの間でthis.CurrentNum(現在選択中のメニュー)をインクリメントさせたりデクリメントさせたりさせているわけですね。

メリットはなんやねん

このMathf.Repeat()を使った場合と直に計算した場合とでどっちが早いのかは知りません。
数学のできない僕としては、Mathf.Repeat()を使った計算方法の方が直感的というだけです。
直に計算する方法では「どんな式だっけな」とページを検索する作業が必要になりますが、Mathf.Repeat()なら僕でもパっと書けます。
ちゅーわけで、メリットは「数学ができなくても数学を使った場合と同じ効果がすぐに得られる」ということでしょうか。

終わりに

数学ゴリゴリできる人には「なんじゃそら」という話でしょうが、数学ができない人間にとってUnityはかなりありがたいツールです。
が、機能が豊富すぎてまだろくに使いこなせていないので、とりあえず一ヶ月~二ヶ月くらいは真面目に勉強してみます。
ちょいちょい勉強して知ったことの記事をあげるかもしれません。
ほなまた。

フォローする