乱数Unityで乱数を使う場合はRandomクラスを使うのが簡単です。このクラスの使い方は公式のマニュアルにある『ランダムなゲームプレイ要素の追加』に詳しく書かれているのですが、今回はその中の『異なる発生確率を持ったアイテムを選択する』の節に注目して遊んでみます。『異なる発生確率を持ったアイテムを選択する』だと長いので、この記事の中では重み付き抽選と呼ぶことにします。SierraUnity2018.1.0f2重み付き抽選とはサイコロを振った時に出る目は、どれも1/6の確率で現れます。これとは違い、結果が選択される確率が異なるケースが重み付き抽選です。分かりやすい例だと宝くじでしょうか。1等は当たる確率がとても低くて、7等までいけば10本に1本の確率で当たるあの感じ。ソシャゲやってる人ならSSRとSRの確率が違うあの感じを思い出して貰えばいいかも。モンハンだったら爪はよく出てくるけど逆鱗はあまり出てこない、とか。これだけ例が出てくるように、重み付き抽選は色々な場面で使われます。サンプルコードを使ってみる実はUnityのマニュアルにある『ランダムなゲームプレイ要素の追加』には重み付き抽選のサンプルコードが載っているので、それをアレンジして遊んでみます。状況設定モンスターを討伐した時のアイテムドロップを考えます。以下のアイテムドロップが設定されている時に、アイテムの選択を行い、どのアイテムが選ばれたかコンソールに表示します。なし分かりやすく合計100%にしていますが、実はUnityのサンプルコードだと合計が100でなくてもちゃんと抽選してくれるので便利です。いうのは、確率を全て合計してそれを分母にしているため。大切なのは、各要素が起こりうる確率の相対的な大きさなんです。スクリプト上のドロップテーブルを元に抽選を行って、コンソールにアイテム名を表示するスクリプトを作成しました。あるモンスターが落とすアイテムだけではなく、ゲームに存在するアイテムのDictionaryも作成し、そこから名前を引っ張るようにしています。すればドロップアイテムの辞書では、どのアイテムが何%でドロップするかだけ持てば良いですもんね。Gist.この中で、Choose()メソッドはUnityのマニュアルと同じような流れで作成しています。違う点は、floatの配列の代わりにドロップアイテムのDictionaryから確率の合計を計算していること。今回はDictionaryで確率を持たせているので、そこから合計値を出しています。個人的にDictionaryを良く使うってのも理由のひとつ。Dictionaryを使わない場合は自分でstructなどを作っておくと便利です。Random.valueでは0から1までの乱数を返してくれます。0』が必要になります。アイテムIDが0の場合は『なし』となるようにしているので、もしこのサンプルを使う場合はあなたのゲームに合わせてチューニングしてくださいな。上記のスクリプトを任意のゲームオブジェクトにアタッチしてゲームを実行すると、以下のようにコンソールにメッセージが表示されます。内容はゲームを実行するたびに変化します。アイテムの入手アイテムの入手ドロップなしは悲しい流石に逆鱗が出るまでぽちぽち粘るのはキツかったので、以下のようにスクリプトを編集して10000回のドロップを確認できるようにしました。Gist.このスクリプトを実行すると、以下のように10000回のドロップ結果が出てきます。10000回のドロップ概ね設定値通りの結果ですね。逆鱗も存在していました。個人的に安心したのが、ちゃんとドロップテーブルのアイテムだけが出てきたこと。ゲーム内のアイテムDictionaryからIDで引っ張る、なんてとこまで実装したので変なアイテムが出ちゃわないか若干不安でした。実際に使う時には、ゲーム内のアイテム一覧からIDで引くパターンが多いかと思うので、今回はそれも含めて入れています。あとUnityのサンプルでfloat型でインデックスを返しているのもなんだか気持ち悪いですし、そこも変えました。個人的にインデックスはintで返したい派。まとめ今回はUnityのサンプルコードを元に重み付き抽選を実装して遊んでみました。発生確率が異なる事象はゲームの中でごまんとあるので、多くの人が触れる部分だと思います。ここではRPGっぽい想定で進めましたが、アクションであれば敵の行動パターンだったりにも使えます。一回自分用に作っておくと使いまわせて便利かも。おまけ乱数を使った脱出ゲームを作りました。脱出に必要なのはゴールを引き当てる運だけです。当たりと外れで重み付き抽選を行なっているので、確率の無情さを噛み締めてください。ブラウザで遊べるのでこちらも是非。エクスプラボエクスプラボhttps://ekulabo.com/random-doorsあなたのゲームをいち早く完成させるための研究所ゲーム開発の攻略チャートを作りました!「ゲームを作ってみたいけど、何から手を付けていいか分からない!」そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。投稿一覧Unityを使ってアプリを作ったり、Assetを作ったりしてる個人開発者。Unity全般ネタとAsset開発の情報を扱っています。Asset開発は日本語の情報が少ないのよね。ことで些細なネタでも情報を蓄積するのが目的です。2018.06.26最近は乱数を使って遊び呆けているのですが、今回はトランプの山札をプレイヤーに配るためのサンプルを作りました。2018.06.28ゲームで欠かせない要素といえばランダム要素。それを実現する乱数について学んでいます。いう話から、乱数の性能を測る指標や、乱数生[...]【Unity】ゲームといえばランダム要素。2018.06.19UnityではRandomクラスを使って簡単に乱数を取得することができます。2018.06.26UnityのRandomクラスを使って、トランプをシャッフルするサンプルを作ります。ラプラスのドア』をリリースしました。確率の無情さと響きあうゲームです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。todoUnityのアセットを作ったり、スマホ向けのアプリを作っています。このブログではUnity初心者に向けたチュートリアルやテクニックを放出しています。詳しいプロフィールはこちら。お仕事の相談や現在提供中のサービスについては、こちらの『サービス内容』のページをご覧ください。Explorers_todoオンライントレーニングのサイトをオープン!エクスプラボを運営しているtodoが、より集中的にゲーム作りについて学べるオンライントレーニングのサイトをオープンしました。エクスプラボのトレーニングルーム』です。勉強したことの進捗も表示できるようになっているので、どれだけ頑張ったのかが分かるようになっています。ゲーム開発の攻略チャート』というe-bookをプレゼントしています。メルマガではゲーム開発のテクニックを中心に役立つ情報をお届けします。詳しくはこちら!お仕事の依頼はこちら!ゲーム開発のサポートも可能!エクスプラボではゲーム開発のサポートのサービスも行なっています。いう場合にオススメのプランです。詳細はこちら!もちろん、普通に開発依頼をいただいてもお手伝いします。その場合はお問い合わせへ。【Unity】ポストプロセシングを使って簡単にプロっぽいゲーム画面を作るゲームの作り方を学べるオンライン講座のサイトをオープンしました!RANKING【Unity】Mathfの切り上げ、切り捨て、偶数丸め。使い分けが大事よねMathf【Unity】ゲームといえばランダム要素。(12)作ったアプリ空とにゃんこと風船と癒し系縦スクロール避けゲーの『空とにゃんこと風船と』(TODOWORKS名義でリリース)気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか?ぼく、猫ですって!タップ系RPG『ぼく、猫ですって!』(TODOWORKS名義でリリース)気軽に遊べるスマホRPG。