Unity初心者の俺が調べたことをメモするスレ (99レス)
上下前次1-新
15: 2023/09/04(月)22:59 ID:8vO4bi2+(1) AAS
書こうと思ったけどTMP・文字列・GCの復習をしていたら時間がなくなったから今日は終わり!
16: 2023/09/04(月)23:14 ID:DD6FCi8L(1) AAS
てかUnityというより
C#の仕様
17: 2023/09/05(火)22:27 ID:1xAiAK3x(1) AAS
いまシステム面とUIを重点的に作ってるからどうしてもC#寄りになるね
その5はまとめられてないからUnityのマジックメソッドについて少し
StartやUpdateといったUnity独自の関数はランタイムによってゲーム実行時
(?)だったかに呼び出しリストが作成される
Unityの内部クラスが呼んでる訳ではないのでこれらのマジックメソッドはprivateでも呼び出しが行われる
逆にこれが原因なのか、通常の関数より呼び出しコストが高い
Update100個より1個のUpdateが100個の独自アプデ関数呼ぶ方がコール回数が1回多いはずなのに動作が軽いのは有名な話(らしい)
加えてawake OnEnable startの呼び出し順には多少注意が必要かもしれない
具体的にはStartよりOnEnableの方が早いので、Startで外部参照の設定するコードを書いてると先にOnEnableが呼ばれてヌルリファだったり意図しない挙動が起きがち
メニュー画面などのUI要素をGameObject.SetActiveで有効無効を切り替えてその際にOnEnable/OnDisableで初期化や再設定を行う設計を採っている時は扱いに注意(n敗)
省2
18(2): 2023/09/05(火)22:33 ID:Ts+LtVa/(1) AAS
UIやってるなら今ならちょうど
ユニティ・テクノロジーズ・ジャパンは、日本語の電子書籍『Unityにおけるユーザーインターフェースのデザインと実装』を無料で提供。専用ページから申し込めばダウンロードできるようになりました
てことで無料で見られるよ
Startを1frame待つのは理にかなってるんじゃないかな
Start関数は画面表示前の処理だし、1frameということは表示してからだから
確実だよね
19: 2023/09/05(火)22:42 ID:JlRpf2nJ(1) AAS
>>18
マジか
良いこと聞いた
20: 2023/09/06(水)22:29 ID:xeaBYfjk(1) AAS
>>18
情報サンクス
早速ダウンロードしてみたわ
UIToolKitはまだ全く手付かずだからどういうものか早く勉強しないとなあ
サンプルシーンで1f待ってるのはStartじゃなくてOnEnableね
そのサンプルはアイテム管理システムで、マネージャークラスがOnEnableでコルーチンで1f待機している間に、ゲーム開始後に道具メニューを開いた時に初めて生成されるアイテム表示用プレハブたちがStartで参照情報をマネージャーに渡してくる設計になっていた
マネージャーのOnEnableでプレハブの描画更新とイベントへのデリゲートの登録をやってるので、仮に1f待機がないとプレハブが生成される最初の1回目だけ参照情報をまだ受け取っておらずヌルリファが発生するからだと思われる
その5 「抽象クラスの個人開発における利点がよく分からない」
まとめというより疑問に近い。
抽象クラスのメリットを調べると、大抵のサイトや記事では「抽象化によって複数人の開発で統一が取れたコードが作成できる」といった内容が挙げられている。では、個人開発における抽象クラスの利点は何なのだろうか。
省5
21: 2023/09/07(木)23:01 ID:zzCLMbJH(1) AAS
眠いから雑なぼやき
シングルトンを初めて自分のゲームに導入してみた。理由はどういうものか使ってみたかったから。
戦闘システム管理クラスをシングルトンにした。戦闘キャラクラスからたくさんアクセスする。
これが密結合か?
グローバル変数化を目的として作っちゃいけないという話は聞いたことあるけど、これもその一つかもしれない。
この辺のコード作成のパターンの理念について何も知らないからそろそろ勉強するときかなあ
22: 2023/09/08(金)22:50 ID:whCfvpks(1) AAS
GCalloc(ヒープメモリアロケーション)にまとめたいけどまだ理解が足りていない
今日は有料アセットのGCalloc潰しを中心に作業をしたが、フィールドのList<構造体>をSortする箇所でアロケーションが発生する理由がイマイチよく分からなかった
引数としてデリゲートを渡すとアロケーションが発生するのはその都度コンパイラがnewしてしまうからで、「デリゲートの代わりにメンバを参照しないラムダ式を利用する」と初回のみのアロケーションで済むらしい
実際ラムダ式に変えたら毎フレームのGCallocが消えたのだが、「IComparerを実装したクラスのインスタンスを利用する」という方法もあると聞き、こちらも試してみたところGCallocは消えないどころか増えた
なんかボックス化というものが絡んでいるような気もするがよく分からないので今日はこれで終わり
23(1): 2023/09/09(土)23:03 ID:DhDPacVH(1/2) AAS
GCalloc潰し二日目
昨日IComparerでGCallocが防止出来なかった理由については未だに分かっていない(というか殆ど調べていない)
「ラムダ式でメンバを参照する」コードを複数の有料アセットで見かける
GCalloc対策の話題でまず槍玉に上がる点だと思うのだが、あまり気にされていない・自分が気にしすぎなのだろうか?
24(1): 2023/09/09(土)23:10 ID:O6P9FobY(1) AAS
えーと
研究者なら気にしてもいいかと
アプリ開発するなら今のハード考えると気にし過ぎじゃね
てか気にする必要ないでしょ
25: 2023/09/09(土)23:34 ID:DhDPacVH(2/2) AAS
>>24
やっぱり気にし過ぎかなあ
特に今作っているゲームはPC向けだから尚更処理落ちやクラッシュはし辛いだろうし
一応自分でコード書く時はアロケーションは基本的に避けるようにしてるけど、有料アセットまで潰して回る必要はないか
26: 2023/09/09(土)23:46 ID:tG9qh3d0(1) AAS
ガベージコレクションなんかC#の基本なんだから気にしなくていいだろ
そんなに嫌ならBurstCompilerでもJobSystemでもECSでも使えば良い
27(1): 2023/09/10(日)00:04 ID:u9L0A1tk(1/2) AAS
結構規模の大きいものを作ってるから可能な限り潰しておきたい感はあるのよね
数時間のプレイに堪えられるような設計にしたい
28(1): 2023/09/10(日)00:11 ID:nCKHuG8g(1) AAS
>>27
ECS,BurstCompiler使えよ
29(2): 2023/09/10(日)09:03 ID:hFRQptHY(1) AAS
>>23
かける労力と得られるものが釣り合ってると思えるならそれぞれの判断でいいと思うけどね
今自分の作ってるやつはインクリメンタルGCついてても数分に一回3~7msくらいのGC Collectが発生してて
シューティングゲームなんでもう少しGCAlloc潰したほうがいいだろうなと思ってる
30(1): 2023/09/10(日)15:42 ID:j4PqFMUR(1) AAS
あかん、行こう
31(1): 2023/09/10(日)21:59 ID:u9L0A1tk(2/2) AAS
>>28
ECSは全然理解してないし有料アセットとの兼ね合いが悪い(自分で調整できない/作業量多すぎ)だから導入するつもりは現状ないかなあ
アセット開発者がDiscordで今からECS対応は難しいって言っているのも見かけたし
>>29
どういうコードがGCalloc発生するのか自分で見て覚えていきたいってのもあるし、しばらくは続けようかな
シューティングゲームって弾幕GameObjectのinitialize/Destroyやオブジェクトプール行き来のDisable/Enableで最適化が大変そうだなあ
差し支えなければ教えてほしいんだけど重い処理を行っている時ってフレーム毎にどのくらいGCalloc発生してますか?
>>30
?
今日はNPC(アセットのコンポーネント)のUpdate30個をOnUpdateに変えるお試し軽量化をしてみた
省6
32(1): 2023/09/10(日)22:01 ID:pyk4erDp(1/2) AAS
ところでヌシはタイトルには初心者って書いてるけど
所持がガベージとか気にしないよね?
ナニモン?
33: 2023/09/10(日)22:01 ID:pyk4erDp(2/2) AAS
所持ちゃう、初心者
34(1): 29 2023/09/11(月)07:46 ID:2rYAG6dH(1) AAS
>>31
大量にオブジェクト扱う部分は全部Burst使ってるから重い部分ではGCAllocは発生してないし、まだ開発序盤で一時的にお試しで入れてるコードやシューティングと関係ないアセットなんかでGCAllocが出てるだけなので参考になりそうな数字は持ってないよ、申し訳ない
上下前次1-新書関写板覧索設栞歴
あと 65 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.010s