【Unity】MultilineAttributeを使ってInspectorで複数行テキストを扱う
Inspectorウィンドウで複数行テキストエリアを表示したい場合は[Multiline]のAttributeを使います。長文を書く場合には通常のテキストフィールドだと狭いため、ある程度大きい複数行テキストエリアにしておくと編集しやすいです。
あなたのゲームをいち早く完成させるための研究所
Inspectorウィンドウで複数行テキストエリアを表示したい場合は[Multiline]のAttributeを使います。長文を書く場合には通常のテキストフィールドだと狭いため、ある程度大きい複数行テキストエリアにしておくと編集しやすいです。
Buttonコンポーネントを使わないでクリックを検知する方法です。UIを用意しなくても、3Dオブジェクトでクリックを検知できるため、3Dゲームで直接オブジェクトをクリックして何かアクションを起こしたい時に便利。
追加タグを持ったオブジェクトが含まれるパッケージをインポートした時に、スクリプトからそのタグを使って操作するとどうなるか実験してみました。スクリプトリファレンスにも『タグマネージャーで登録してから使ってね』とあるので予想はつきますが、手を動かしてチャレンジ。
SpaceAttributeはInspectorウィンドウで余白を表示することができるAttributeです。関連性のあるフィールドをまとめて表示すれば、どこを触ったらいいのか分かりやすくなります。HeaderAttrubuteと組み合わせればより効果的。
HeaderAttributeを使って、Inspectorウィンドウに表示されるフィールドを整理して表示できます。RPG系のゲームではテストプレイ中にパラメータをいじることも多いと思うので、Headerをうまく使って整理しておくと、操作するべきフィールドがすぐに見つかるはず。
初心者の時に使い方に迷ったDeg2RadとRad2Degの使い方についてメモ。最初はメソッドと勘違いしていたので引数を渡そうとしたりと、大混乱した記憶があります。変換用の値を返すプロパティなので、掛けるだけで良かったのに……orz この記事では簡単にサンプルコードも載せています。
切り上げ、切り捨て、偶数丸めをしたい時にはMathfのCeil、Floor、Roundを使うと便利。使い方も難しくないので、RPGのダメージ計算とかでガンガン使えると思います。Roundは四捨五入じゃないので若干戸惑うかも。
[DisallowMultipleComponent]のAttributeを使うことで、同一のゲームオブジェクトに、同じスクリプトまたはコンポーネントを複数アタッチできないようにします。1行追加するだけで実現できるので、Manager系のクラスには付けておくと安心かも。
アタッチしてないコンポーネントをスクリプトから操作しちゃうこと、よくありませんか? うっかりGetComponentしてエラーを出しちゃう……そんな時には、RequireComponentのAttributeを付けておくのがオススメ! スクリプトをアタッチするときにコンポーネントも一緒にアタッチしてくれるので、うっかりさんも安心です(通販風)
ゲームで欠かせない要素といえばランダム要素。それを実現する乱数について学んでいます。ここでは乱数って何? という話から、乱数の性能を測る指標や、乱数生成法の紹介を行なっています。
Unityのマニュアルには『ランダムなゲームプレイ要素の追加』のトピックがあります。乱数の考え方の基本を押さえるのにとても良い出発点だったので、このブログでも実例を交えてサンプルコードを用意。今回はランダムな空間座標を取得してオブジェクトを配置するサンプルです。
最近は乱数を使って遊び呆けているのですが、今回はトランプの山札をプレイヤーに配るためのサンプルを作りました。Unityのマニュアルに載っているサンプルコードを出発点にトランプゲームっぽくチューニングを行なっています。
UnityのRandomクラスを使って、トランプをシャッフルするサンプルを作ります。Unityのマニュアルには『ランダムなゲームプレイ要素の追加』として乱数を使ったランダム要素の扱いが載っているので、これを出発点にすると取っ掛かりやすいかも。
連続確率変数で重み付きのランダムな値を取得する際、AnimationCurveを使うと便利です。AnimationCurveにはいくつかのプリセットがあるので、それらを使って確率分布曲線を描いてみる実験をしています。慣れたらオリジナルのカーブを作ってみるのもあり。
AnimationCurveを使って、連続的な確率変数に重み付けをします。Unityのマニュアルを出発点に、10000回ランダムな値を取得し、その確率分布曲線を出してみます。視覚的に重み付けができるのが一番のメリットかも。
異なる発生確率を持った事象を選択するのはかなり頻繁に行われることで、ランダム性が重視されるゲームではほぼ必須と言っても過言ではありません。ここでは敵を倒した時にドロップするアイテムの抽選を例に、Unityのサンプルコードをアレンジして遊んでいます。
UnityのRandomクラスって、結構確率論に沿ってるんですね。自分で手を動かして確認してみると実感します。この記事ではサイコロを振って1から6までの数字が全部出るまでの試行回数をシミュレーションし、期待値や最小値などが理論値どどの程度一致するかを確認しています。
UnityのRandomクラスを使って、サイコロを振るケースを考えます。サイコロを10回投げたときに全ての目が揃っているかどうか確認することとし、少ない試行回数でどれくらいの人数が「偏り」を感じるのか実験します。
UnityではRandomクラスを使って簡単に乱数を取得することができます。この記事では簡単な例として、サイコロを振る時にそれぞれの目が出るサンプルと、その発生確率の統計を行なっています。試行回数が多いと確率は収束しますが、少ない時には体感的に偏ってると感じることも。
Unityではメンバ変数(フィールド)にRangeAttributeを指定しておくと、Inspectorウィンドウでスライダーを使って値を調整できるようになります。最大値と最小値を指定するため、Inspectorでの操作で変な値が入ることも少なくなり、スライダーの移動量で大体の値を掴むこともできます。