だれも教えてくれない細かないろいろ(Unity)
メリークリスマス!!メリークリスマス!
団体長のRaikaです。もしかして白いろの文字見つけた?
アドカレ最終日は例年通り、団体長が書きます。前回のブログはこちら
よろしくお願いいたします。とりの自信がない期待しないで!
まえがき
このブログは、僕がRiG++に入って3年間使ってきた中で、「これはじめから教えてほしかった..」、「そんな仕様だったの!?」というものをまとめたものです。一つでも初めてしった!!というものが見つかればいいなと思います。もし、全部知っていたらあなたは神です。あ、使えるとは言ってないです。背景白以外のひとは簡単にみつけたかも
まえがきとか書くのが苦手でなにを書いたらいいのかわからない
ゲームオブジェクト複製の番号の秘密
これはご存じの方が多いかもしれません。僕は1年前に初めて知りました。
ゲームオブジェクトを複製したときの番号は実は変えることができます。
ゲームオブジェクト の番号is何?
ゲームオブジェクト の番号isゲームオブジェクト名の横につく番号です。
Ctrl + Dが複製のショートカットキー これ知ってた?
この、(数)の部分は設定で変えることが出来ます。
Edit > ProjectSettings > Editor >NumberingScheme を変えることでできます。
これで番号の表示を変えることができます。使い方は好み
以上 ゲームオブジェクト複製の番号の秘密 でした。
突然ですが、ここでクイズです。「あいいえお」は何の動作?
OnTriggerXXXとOnCollisionXXXがもし同じオブジェクトについていて同時に条件を満たしたときどちらが先に実行されるでしょう?同時につくことは実際なさそうなことは秘密
答えは次の秘密の最後にあります。わかるかな?
音源のロードの仕方の秘密
音源(BGMやSE)をインポートしたときUnityでそのまま流していませんか?これはちょっとイケナイかもしれません。
音源にはロードのタイプというものがあります。詳しく知りたい方はドキュメントを参考にしましょう。ドキュメントにはすべてがある。
また、DTMの方は覚えておき、ゲーム制作のときにプログラマーに教えてあげましょう。
それでは秘密についての説明です。
音源をダウンロードした時、Inspectorこのようになっています。
注目するところはLoadTypeとかかれているところです。
Load Typeには三つあり、Decompress On Load 、Compressed in Memory、Streamingがあります。
Decompress On Loadは読み込まれたときに展開してから読み込みます。大きなファイルには使用してはいけません。これがデフォルト設定
Compressed in Memory は、読み込まれたときは圧縮されたままですが、再生するときに展開を行います。これの使いどころはよくわからん。
Streamingは、ロードをしながら再生します。これによってメモリはあまり使用されないようになります。
よって、音源はメモリの使用量に気を付けないといけません。メモリへの意識は大事
固い説明はつらいので、結論としては、
Decompress On Load は SE。
Streaming はBGMと覚えておきましょう。
これを知ったのは最近でまだ実感はわからない。
問題の答え 「うがい」
皆さん答えはわかりましたか?答えはOnTriggerXXXです。ドキュメントに理由が乗っています。正解したあなたに1点差し上げます。
二問目です。これはC#についての問題です。まだ続くのか..
クラスAというものにKansuu()という関数が実装されています。Aのインスタンスはaとすると、”a?.Kansuu();”を実行したときの「?」は何をする演算子でしょう?わかるかな
RaycastAll関数の秘密
みなさん、一度はつかったことがあるでしょう。そう、RaycastAll関数です。みんな大好きな関数です。大っ嫌いな関数なのに以外と使うところがある。
冗談はおいておき、RaycastAllはRayを飛ばしたときの当たったものの配列を返す関数です。Physicsクラスにあります。もしかしたら未来で使うことがあるかもしれません。そのときのためとして覚えていないといけない秘密があります。
それは、、、、、、、、、、、、、、、、
Rayが当たった順番通りに格納されているわけではないということです。??????????????
なにこの仕様。本当に意味がわからないです。順番通りに格納してよ!この仕様知るまでどんだけ時間使ったと思うんだ!ドキュメントに書いておいてよ!
…書いてありました。Casts a ray through the Scene and returns all hits. Note that order of the results is undefined.(シーンに光線を当て、すべてのヒットを返します。結果の順序は未定義であることに注意してください。by google翻訳)
仕様しらないほうが悪いだろ!!と思う方、こちらをご覧ください。
なんで、Physics2D.RaycastAllは順番通りに格納するんだよ!!??????
引用:Raycast 関数に似ていますが、ヒットした最初のコライダーを返すだけでなく、レイに沿って接触したすべてのコライダーが返されるところが異なります。コライダーは原点からの距離順に並べられます。
本当に騙されました(勝手)。なんと、Physics2Dの方は普通に順番通りに格納されます。3Dにも実装してください(願い)
みなさん、RaycastAllを使う際は気をつけてください。
以上RaycastAll関数の秘密でした。
問題の答え
皆さん答えはわかりましたか?答えはNull条件演算子です。Microsftのドキュメントに使い方が乗っています。Null条件演算子を使うと見栄えがよくなるのでかっこよく使っていきましょう!乱用注意
おわり え、もう終わり?短くない?
以上三つの秘密についてでした。たった三つ?????
細かな仕様などの話でしたが参考になったら幸いです。
ゲームジャムやグループ活動では画面を共有しながらやるのがおすすめです。自分が知らない仕様などを見ることがあるので是非試してみてください。ゲームジャム参加しよう!!
以上Raikaでした。RaycastAllの仕様を伝えたかっただけ