と思い立ったので遊んでみましょ。Colliderのパラメータ紹介についてはこちら。Colliderのパラメータを紹介。拡大・縮小で調整しましょhttps://ekulabo.com/sphere-collider衝突を表現するのに必要なコンポーネントであるColliderを扱っています。Colliderのパラメータを紹介しています。Colliderを組み合わせることで様々な形を表現できます。SierraUnity2018.1.0f2今回作りたいもの箱の中で気体分子が動き回るようなゲームを作ります。この時、箱の中には複数の気体分子が飛び回るようにします。Collider感を出すために単原子分子でヘリウムとかネオンとかアルゴンとかそんな感じの気体にしましょ。希ガスが充満する空間とか窒息まっしぐらですね。放電したら発光しそう(申し訳程度の化学知識)気体分子のモデルとして使うのはSphereオブジェクトです。Colliderと相性がいいですからね。RigidbodyコンポーネントのUseGravityはfalseにして自由に動き回れるようにし、ゲーム開始時にランダム方向に力を加えます。正確な動きのシミュレーションではないので、それっぽく見えればOKにします。Colliderを使うので、物理特性マテリアルも設定しておきます。ないと、壁にくっついて終わりになっちゃうんです。物理特性マテリアルは以下の設定にしておきます。分かりやすく単純に摩擦力はどちらも0にして、反発係数を1にします。この物理特性マテリアルは『gas』と名乗りながら気体分子だけでなく壁にも同じものをセットしました。スクリプト気体分子をインスタンス化するスクリプトも作ってみました。Gist.Prefabにした気体分子オブジェクトのリストを作り、その中からランダムに気体分子を選択してインスタンス化します。作った気体は以下のように色分けして、見た目が変わるようにしています。Dynamicにしています。壁だけではなく気体分子オブジェクト同士でも衝突してもらうようにしましょ。AngularDragは初期値の0.05から0に変更し、上で少し触れたUseGravityをfalseにしています。スクリプトの中では、intervalTimeで設定した時間間隔でオブジェクトをインスタンス化しています。どの気体分子をインスタンス化するかは、Random.Rangeを使って選択しています。このRandom.Rangeってちょっと厄介で、範囲の最小値と最大値を引数で決めるのですが、floatで指定すると最大値を含み、intで指定すると最大値を含まないんです。乱数だいぶ偏ってない?」なんて心配する羽目になるので注意(1敗)Update()の中では、気体分子の数をカウントして画面に表示するようにもしています。Gist.もいっこ作ったのが気体分子に力を与えるスクリプト。インスタンス化された気体分子に、指定した範囲の力を与えます。Start()の中で、力をランダムに決めるメソッドを読んでいます。最初の1回だけ力を加えてあとは何もしないサボりスクリプトになっています。Colliderをつけておきます。隙間が無いように置いておけばOKかな。Colliderとして使います。気体分子がぶつかって壁が壊れるとか物理法則を無視するにもほどがありますからね。いざ、実行んじゃ実行してみましょ。気体分子が飛び回るよしよし、うまくいってそう。これで数が増えればそれっぽい動きになるかな。こんな感じこんな感じ狭い空間をたくさんのオブジェクトが飛び回っているのは見ているだけでも楽しいです。画像がちっちゃいので分かりにくいですが、飛び回るオブジェクト同士でも衝突して運動の向きが変わっているのが見て取れます。オブジェクトが増えると......こうして眺めていたのですが、オブジェクト数が170を過ぎた辺りで異変が。なんと、1フレームの処理時間が約1000msになっていました。フレームレートは驚異の1FPS。化石パソコンでもなかなかこんな値見ないっす。Profilerを見るとこんな感じ。急激に物理処理が上がったFixedUpdateの中身がえらいこっちゃでした。上限の15FPSを突き抜けてますね。原因として思い当たるのはアレ。Detectionを『ContinuousDynamic』にしたことです。『ContinuousDynamic』だと、自分の運動経路上にいるRigidbodyと非Rigidbodyとの衝突を検知してくれるのですが、動き回るオブジェクトに関して自分の経路上に来るかどうか計算しているので、そのコストが重いんです。Detection(衝突の検知)について、値を変えると物体の運動がどのように変化するのかを実験しています。Detectionの設定はどうかによって衝突を検知できるかどうかが...衝突検知モードの動作については上の記事で紹介しています。動くオブジェクトに関して言えば、ちょうど動作が重くなった辺りではオブジェクト数が170個でした。自分の運動経路上に、自分以外のRigidbodyが飛んで来るかどうかの計算をするので、170*170=28900の計算処理が走ることになるのかな。この計算処理はFixedUpdate()が呼ばれるたびに走ることに。いかんせんRigidbodyのコードは非公開で確認できないのですが、徐々に重くなるというよりは、一気にドカンと重くなる感じだったので、計算量はO(n^2)なのかなーと予想。Colliderの数が多くなると地獄めいた計算になるのね。Colliderを使って、狭い空間を飛び回る気体の単原子分子を表現してみました。Colliderがあるので、ぽんぽんぶつかっていくのを眺めていると楽しくなります。数が増えると冒涜的で地獄めいた計算量となるので、用法用量を守って楽しくColliderを使いましょ。ゲーム開発の攻略チャートを作りました!「ゲームを作ってみたいけど、何から手を付けていいか分からない!」そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。Colliderのパラメータを紹介。投稿一覧Unityを使ってアプリを作ったり、Assetを作ったりしてる個人開発者。Unity全般ネタとAsset開発の情報を扱っています。Asset開発は日本語の情報が少ないのよね。ことで些細なネタでも情報を蓄積するのが目的です。2018.05.26Unityで衝突を表現するためのColliderを使って、オブジェクトの爆発的なぶっ飛びを表現してみます。2018.05.23衝突を表現するのに必要なコンポーネントであるColliderを扱っています。Colliderのチュートリアルが載っていたので、それを使って遊んでいます。Colliderのパラメータを紹介。2018.05.28衝突を表現するのに必要なコンポーネントであるColliderを扱っています。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。todoUnityのアセットを作ったり、スマホ向けのアプリを作っています。このブログではUnity初心者に向けたチュートリアルやテクニックを放出しています。詳しいプロフィールはこちら。お仕事の相談や現在提供中のサービスについては、こちらの『サービス内容』のページをご覧ください。Explorers_todoオンライントレーニングのサイトをオープン!エクスプラボを運営しているtodoが、より集中的にゲーム作りについて学べるオンライントレーニングのサイトをオープンしました。エクスプラボのトレーニングルーム』です。勉強したことの進捗も表示できるようになっているので、どれだけ頑張ったのかが分かるようになっています。ゲーム開発の攻略チャート』というe-bookをプレゼントしています。メルマガではゲーム開発のテクニックを中心に役立つ情報をお届けします。詳しくはこちら!お仕事の依頼はこちら!ゲーム開発のサポートも可能!エクスプラボではゲーム開発のサポートのサービスも行なっています。いう場合にオススメのプランです。詳細はこちら!もちろん、普通に開発依頼をいただいてもお手伝いします。その場合はお問い合わせへ。【Unity】ポストプロセシングを使って簡単にプロっぽいゲーム画面を作るゲームの作り方を学べるオンライン講座のサイトをオープンしました!RANKING【Unity】Mathfの切り上げ、切り捨て、偶数丸め。使い分けが大事よねMathf【Unity】ゲームといえばランダム要素。(12)作ったアプリ空とにゃんこと風船と癒し系縦スクロール避けゲーの『空とにゃんこと風船と』(TODOWORKS名義でリリース)気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか?ぼく、猫ですって!タップ系RPG『ぼく、猫ですって!』(TODOWORKS名義でリリース)気軽に遊べるスマホRPG。