乱数そろそろ乱数ブログを名乗り始めてもいい気がしてきた今日この頃。pocket【Unity】Randomクラスを使ってトランプをシャッフルするサンプルhttps://ekulabo.com/random-shuffleUnityのRandomクラスを使って、トランプをシャッフルするサンプルを作ります。Unityのマニュアルには『ランダムなゲームプレイ要素の追加』として乱数を使ったランダム要素の扱いが載っているので、これを出発点にすると取っ掛かりやすいかも。前回も乱数ネタだったのですが、Unityのマニュアルにある『ランダムなゲームプレイ要素の追加』を出発点に、トランプの山札をシャッフルするサンプルを作成しました。思って、山札から手札が配られるケースを実装してみます。SierraUnity2018.1.0f2Unityのサンプルコードについて上述のマニュアルにあるケースは、キャラクター一覧から、何人かのキャラクターを選んでいくつかの生成ポイントに配置するものです。配列を使っており、キャラクター配列のそれぞれの要素にアクセスしていき、その要素が選ばれる確率と乱数を比較しています。乱数の値が確率以下であれば選ばれたと見なします。指定の要素数だけアイテムを抽出したら処理を終了しています。このコードの中では、元々のリストからの削除は行なっていないので、トランプに応用する場合はそれも考えないといけません。Listを使って実装してみる前回はトランプの山札をListで実装したので、それに合わせてListを使って実装してみます。pocket【Unity】Randomクラスを使ってトランプをシャッフルするサンプルhttps://ekulabo.com/random-shuffleUnityのRandomクラスを使って、トランプをシャッフルするサンプルを作ります。Unityのマニュアルには『ランダムなゲームプレイ要素の追加』として乱数を使ったランダム要素の扱いが載っているので、これを出発点にすると取っ掛かりやすいかも。前回作成したスクリプトは上の記事を見ていただくか、GitHubをご覧ください。このスクリプトに、手札を配る処理を追加します。Gist.手札の内容を保持するリストをフィールドに追加します。DistributeCardsでは、引数で渡された枚数をcardListから選択しています。大筋ではUnityのサンプルの流れになっていますが、配ったカードは山札から無くしたいので、プレイヤー用の手札と、残り物カードのリストを用意しています。プレイヤーの手札に加える枚数を山札に残っている枚数で割ることで、そのカードが選ばれる確率を出しています。その確率の値とRandom.valueを比較して、Random.valueが小さい値になっていたらそのカードをプレイヤーの手札リストに、大きければ残り物カードリストに追加しています。プレイヤーの手札を配れ終えたら、残り物カードリストをそのまま山札にしています。このメソッドはStart()の中で呼ぶようにしています。実行結果このスクリプトを保存してゲームを実行すると、以下のようにコンソールに表示されます。8枚の手札が配られた山札の中から8枚のカードが手札として加えられました。この8枚が山札に無いことを確認するため、以下のコードを追加しました。Gist.CheckDuplicationメソッドで、引数のカードリストと山札のカードリストで重複が無いか確認しています。引数のカードリストの全ての要素について山札での検索を行い、重複があれば重複していることを知らせます。このメソッドで確かめると以下のようになりました。重複はなさそう流石に目grepするのはきつかったので、こうしたチェックメソッドがあるといい感じ。重複ありのリストを引数にしたらちゃんと『重複』と表示されたので動作も良さそう。実はそのままリストの頭から取ってもいい多分気付いた人も多いと思いますが、Unityのマニュアルに無理に従わなくても、今回のケースだとシャッフルしてある山札の先頭から指定枚数を手札に加えたほうが楽です。こちらも簡単に実装するとこんな感じ。Gist.上のDistributeCardsではなく、こちらのDistributeFromDeckHeadを呼ぶようにして、配る前の山札もコンソールに出力するようにしたらこんな感じ。配布後の山札と手札ちゃんと山札の上から8枚移動させてます。重複チェックもOK重複チェックも通りました。List.RemoveRangeを使って一気にリストから要素を外せるので、山札の上からカードを取っていくときはこちらが早いかもです。今回のサンプルで使ったスクリプトの全文はGitHubをご覧下さい。今回実装したトランプの配布方式では、個人的に山札の上から配る方式が簡単で良かったです。Unityのサンプルコードは、多分トランプをテーマにするよりも元のリストが変わらないケース、例えば敵キャラのデータ一覧からランダムに重複無しで敵を出現させるなんて時に便利なサンプルコードでした。配列を使っているので、元のリストの長さが変わらないのであれば結構高速に動くはずです。今回はその良さを十二分に活かせませんでしたが、出発点として考えるにはとてもいいサンプルでした。まとめトランプの山札から手札にカードを配るサンプルを実装しました。トランプの場合はカード全部合わせても50枚から60枚程度なので、アクションごとにリストをいじってもそこまで重くはならないはず。乱数要素はそんなになかったので、単純にトランプっぽいゲームを作るチュートリアルになった気が......このままゲームを作るとこまでチュートリアルにするのもいいかも(やるとは言っていない)ゲーム開発の攻略チャートを作りました!「ゲームを作ってみたいけど、何から手を付けていいか分からない!」そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。投稿一覧Unityを使ってアプリを作ったり、Assetを作ったりしてる個人開発者。Unity全般ネタとAsset開発の情報を扱っています。Asset開発は日本語の情報が少ないのよね。ことで些細なネタでも情報を蓄積するのが目的です。2018.06.23異なる発生確率を持った事象を選択するのはかなり頻繁に行われることで、ランダム性が重視されるゲームではほぼ必須と言っても過言ではありません。2018.06.25連続確率変数で重み付きのランダムな値を取得する際、AnimationCurveを使うと便利です。ラプラスのドア』をリリースしました。確率の無情さと響きあうゲームです。2018.06.27Unityのマニュアルには『ランダムなゲームプレイ要素の追加』のトピックがあります。2018.06.28ゲームで欠かせない要素といえばランダム要素。それを実現する乱数について学んでいます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。todoUnityのアセットを作ったり、スマホ向けのアプリを作っています。このブログではUnity初心者に向けたチュートリアルやテクニックを放出しています。詳しいプロフィールはこちら。お仕事の相談や現在提供中のサービスについては、こちらの『サービス内容』のページをご覧ください。Explorers_todoオンライントレーニングのサイトをオープン!エクスプラボを運営しているtodoが、より集中的にゲーム作りについて学べるオンライントレーニングのサイトをオープンしました。エクスプラボのトレーニングルーム』です。勉強したことの進捗も表示できるようになっているので、どれだけ頑張ったのかが分かるようになっています。ゲーム開発の攻略チャート』というe-bookをプレゼントしています。メルマガではゲーム開発のテクニックを中心に役立つ情報をお届けします。詳しくはこちら!お仕事の依頼はこちら!ゲーム開発のサポートも可能!エクスプラボではゲーム開発のサポートのサービスも行なっています。いう場合にオススメのプランです。詳細はこちら!もちろん、普通に開発依頼をいただいてもお手伝いします。その場合はお問い合わせへ。【Unity】ポストプロセシングを使って簡単にプロっぽいゲーム画面を作るゲームの作り方を学べるオンライン講座のサイトをオープンしました!RANKING【Unity】Mathfの切り上げ、切り捨て、偶数丸め。使い分けが大事よねMathf【Unity】ゲームといえばランダム要素。(12)作ったアプリ空とにゃんこと風船と癒し系縦スクロール避けゲーの『空とにゃんこと風船と』(TODOWORKS名義でリリース)気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか?ぼく、猫ですって!タップ系RPG『ぼく、猫ですって!』(TODOWORKS名義でリリース)気軽に遊べるスマホRPG。