Unity初心者の俺が調べたことをメモするスレ (99レス)
Unity初心者の俺が調べたことをメモするスレ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
19: 名前は開発中のものです。 [] 2023/09/05(火) 22:42:05.64 ID:JlRpf2nJ >>18 マジか 良いこと聞いた http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/19
20: 名前は開発中のものです。 [sage] 2023/09/06(水) 22:29:47.35 ID:xeaBYfjk >>18 情報サンクス 早速ダウンロードしてみたわ UIToolKitはまだ全く手付かずだからどういうものか早く勉強しないとなあ サンプルシーンで1f待ってるのはStartじゃなくてOnEnableね そのサンプルはアイテム管理システムで、マネージャークラスがOnEnableでコルーチンで1f待機している間に、ゲーム開始後に道具メニューを開いた時に初めて生成されるアイテム表示用プレハブたちがStartで参照情報をマネージャーに渡してくる設計になっていた マネージャーのOnEnableでプレハブの描画更新とイベントへのデリゲートの登録をやってるので、仮に1f待機がないとプレハブが生成される最初の1回目だけ参照情報をまだ受け取っておらずヌルリファが発生するからだと思われる その5 「抽象クラスの個人開発における利点がよく分からない」 まとめというより疑問に近い。 抽象クラスのメリットを調べると、大抵のサイトや記事では「抽象化によって複数人の開発で統一が取れたコードが作成できる」といった内容が挙げられている。では、個人開発における抽象クラスの利点は何なのだろうか。 結論から言うと調べても自分にはあまり理解できなかった。「無い」や「殆ど無い」としている記事も散見される。 というのも、単に複数のクラスで共通したルールを実装したいなら純粋に基底クラスを継承して利用すればだいたい足りる気がする。 たしかに抽象クラスで関数の名称やシグネチャなどを設定して派生クラスにそれに沿った実装を強制するのは、コードの統一性を確保する上では有用ではあるが、個人開発だとコードを弄るのは基本的に自分だけなので、自分で注意すればよくない?という気も まあC#に限らずヒューマンエラーを防げます系機能は究極的には全部「自分で注意すりゃよくない?」になるし、もちろん自分にそんな神みたいなこと無理なんで…(OnEnableとStartで何回もエラー引き起こす程の低い注意力) 自分としては抽象クラスは「インスタンスは絶対これで生成しないけど共通・統一された処理を実装したい」ケースでお守り的に使っていこうかなと思った(適当) http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/20
21: 名前は開発中のものです。 [sage] 2023/09/07(木) 23:01:59.92 ID:zzCLMbJH 眠いから雑なぼやき シングルトンを初めて自分のゲームに導入してみた。理由はどういうものか使ってみたかったから。 戦闘システム管理クラスをシングルトンにした。戦闘キャラクラスからたくさんアクセスする。 これが密結合か? グローバル変数化を目的として作っちゃいけないという話は聞いたことあるけど、これもその一つかもしれない。 この辺のコード作成のパターンの理念について何も知らないからそろそろ勉強するときかなあ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/21
22: 名前は開発中のものです。 [sage] 2023/09/08(金) 22:50:45.01 ID:whCfvpks GCalloc(ヒープメモリアロケーション)にまとめたいけどまだ理解が足りていない 今日は有料アセットのGCalloc潰しを中心に作業をしたが、フィールドのList<構造体>をSortする箇所でアロケーションが発生する理由がイマイチよく分からなかった 引数としてデリゲートを渡すとアロケーションが発生するのはその都度コンパイラがnewしてしまうからで、「デリゲートの代わりにメンバを参照しないラムダ式を利用する」と初回のみのアロケーションで済むらしい 実際ラムダ式に変えたら毎フレームのGCallocが消えたのだが、「IComparerを実装したクラスのインスタンスを利用する」という方法もあると聞き、こちらも試してみたところGCallocは消えないどころか増えた なんかボックス化というものが絡んでいるような気もするがよく分からないので今日はこれで終わり http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/22
23: 名前は開発中のものです。 [sage] 2023/09/09(土) 23:03:59.62 ID:DhDPacVH GCalloc潰し二日目 昨日IComparerでGCallocが防止出来なかった理由については未だに分かっていない(というか殆ど調べていない) 「ラムダ式でメンバを参照する」コードを複数の有料アセットで見かける GCalloc対策の話題でまず槍玉に上がる点だと思うのだが、あまり気にされていない・自分が気にしすぎなのだろうか? http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/23
24: 名前は開発中のものです。 [sage] 2023/09/09(土) 23:10:00.18 ID:O6P9FobY えーと 研究者なら気にしてもいいかと アプリ開発するなら今のハード考えると気にし過ぎじゃね てか気にする必要ないでしょ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/24
25: 名前は開発中のものです。 [sage] 2023/09/09(土) 23:34:12.06 ID:DhDPacVH >>24 やっぱり気にし過ぎかなあ 特に今作っているゲームはPC向けだから尚更処理落ちやクラッシュはし辛いだろうし 一応自分でコード書く時はアロケーションは基本的に避けるようにしてるけど、有料アセットまで潰して回る必要はないか http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/25
26: 名前は開発中のものです。 [] 2023/09/09(土) 23:46:32.90 ID:tG9qh3d0 ガベージコレクションなんかC#の基本なんだから気にしなくていいだろ そんなに嫌ならBurstCompilerでもJobSystemでもECSでも使えば良い http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/26
27: 名前は開発中のものです。 [sage] 2023/09/10(日) 00:04:42.69 ID:u9L0A1tk 結構規模の大きいものを作ってるから可能な限り潰しておきたい感はあるのよね 数時間のプレイに堪えられるような設計にしたい http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/27
28: 名前は開発中のものです。 [] 2023/09/10(日) 00:11:59.35 ID:nCKHuG8g >>27 ECS,BurstCompiler使えよ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/28
29: 名前は開発中のものです。 [sage] 2023/09/10(日) 09:03:38.32 ID:hFRQptHY >>23 かける労力と得られるものが釣り合ってると思えるならそれぞれの判断でいいと思うけどね 今自分の作ってるやつはインクリメンタルGCついてても数分に一回3~7msくらいのGC Collectが発生してて シューティングゲームなんでもう少しGCAlloc潰したほうがいいだろうなと思ってる http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/29
30: 名前は開発中のものです。 [sage] 2023/09/10(日) 15:42:12.07 ID:j4PqFMUR あかん、行こう http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/30
31: 名前は開発中のものです。 [sage] 2023/09/10(日) 21:59:14.98 ID:u9L0A1tk >>28 ECSは全然理解してないし有料アセットとの兼ね合いが悪い(自分で調整できない/作業量多すぎ)だから導入するつもりは現状ないかなあ アセット開発者がDiscordで今からECS対応は難しいって言っているのも見かけたし >>29 どういうコードがGCalloc発生するのか自分で見て覚えていきたいってのもあるし、しばらくは続けようかな シューティングゲームって弾幕GameObjectのinitialize/Destroyやオブジェクトプール行き来のDisable/Enableで最適化が大変そうだなあ 差し支えなければ教えてほしいんだけど重い処理を行っている時ってフレーム毎にどのくらいGCalloc発生してますか? >>30 ? 今日はNPC(アセットのコンポーネント)のUpdate30個をOnUpdateに変えるお試し軽量化をしてみた 0.5msぐらいの改善が見られた 他にも自分のゲームに使用しない無駄な機能がついていたりするから削っていこう アセットに更新があった時に面倒だが、勉強道具にしたり自分で色々と改造したりできるから完全なC#コードが提供されているものは便利(DLLで提供されているものがあるか知らんけど) アセットとC#の話で一つ複雑だなと思うのは、AssemblyDefinitionによってアセンブリが定義・分割されているとアセット側からこちらの自作コードにそのままではアクセスできない点。コード弄り始めた頃は原因が分からなくて四苦八苦した。 自作コードにAssemblyDefinitionsを設定していない場合は自動的にAssembly-Csharpに配置されるが、このAssembly-Csharpと他アセンブリのアクセスは一方通行の関係にある。すなわち、Assembly-Csharpから他アセンブリにはアクセスできるが、他アセンブリからAssembly-Csharpにアクセスすることはできない。 なので自分のコードに弄ったアセット側からアクセスしたい場合は、自分のコードをアセンブリ定義・分割して参照設定を追加するか、自分のコードをアセット側のアセンブリ内に入れる必要がある。 まあむしろアセットでアセンブリ定義・分割されてない方が色々と問題らしいので自分の経験は初心者特有の躓きって感じだな http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/31
32: 名前は開発中のものです。 [sage] 2023/09/10(日) 22:01:38.99 ID:pyk4erDp ところでヌシはタイトルには初心者って書いてるけど 所持がガベージとか気にしないよね? ナニモン? http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/32
33: 名前は開発中のものです。 [sage] 2023/09/10(日) 22:01:57.78 ID:pyk4erDp 所持ちゃう、初心者 http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/33
34: 29 [sage] 2023/09/11(月) 07:46:22.08 ID:2rYAG6dH >>31 大量にオブジェクト扱う部分は全部Burst使ってるから重い部分ではGCAllocは発生してないし、まだ開発序盤で一時的にお試しで入れてるコードやシューティングと関係ないアセットなんかでGCAllocが出てるだけなので参考になりそうな数字は持ってないよ、申し訳ない http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/34
35: 名前は開発中のものです。 [sage] 2023/09/11(月) 21:22:14.79 ID:GchgKIS7 >>34 なるほどありがとう 自分のゲームはだいぶ時間かかりそうだからその間にECSやバーストコンパイラーの仕様や情報が充実するといいなあ >>32 Unity歴5ヵ月弱の初心者だよ 今日はあまり何もしなかった 自作インベントリの検索機能を少し弄ったけど何となく前の仕様の方が使い勝手が良かった気がして結局コードを元に戻した 検索機能を処理する複数のクラスが絡み合っているので(密結合とはこういう状態?)、今後の保守や改良に備えてコードを見直した方がいいかもしれないと思った 自作スクロールの描画処理については既に一部をインターフェースや抽象クラスにしてあるので、検索機能も(今のところ予定はないけど)インベントリ以外に流用することを考えると同じように改良したい ただこの辺はコーディングや設計の思想について先に学ばないと結局グダりそうだね http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/35
36: 名前は開発中のものです。 [sage] 2023/09/11(月) 21:58:09.05 ID:dpI1L58C 歴5ヶ月でインタフェースや抽象クラスとか Unityは浅いけどC#は長い? http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/36
37: 名前は開発中のものです。 [sage] 2023/09/11(月) 22:31:07.12 ID:GchgKIS7 Unity歴とC#歴は同じ プログラミングはキッズの頃にキッズ向け言語とRPGツクールのRGSS(Ruby)を少しやった程度 ただRubyはもう全く覚えてない http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/37
38: 名前は開発中のものです。 [sage] 2023/09/12(火) 22:16:09.67 ID:Agu+xwh8 ジェネリックについての勉強を少し始めた 自作のスクロールを拡張する上で複数の型を扱うことになるかもしれないので、スクロールの抽象クラスに一部ジェネリックの抽象プロパティや抽象メソッドを実装して今後のコーディングを統一的にするのが目的 ジェネリックな関数には制約条件というものが付けられるそうなので、これでスクロールに渡すべき型に特定のインターフェースの実装を要求すればコーディングのミスも減りそう 逆に言うとこれも個人開発だとミスの防止という点以外の利点が分からん…もっと勉強が必要そうだ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/38
39: 名前は開発中のものです。 [sage] 2023/09/12(火) 22:30:53.89 ID:DqJC+Tye すごいなぁ 自分はUnity半年あたりはやっと3DでUnityちゃんが動いて喜んでたわ それで満足してた(笑) http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/39
40: 名前は開発中のものです。 [] 2023/09/13(水) 08:16:34.64 ID:zrU2QrrP 俺も歴同じくらいでほぼほぼchatGPTに聞きながらやってるけど>>1ほど理解せずに進めちゃってる キャラクターをステートマシンで動かしてるんだけど、抽象クラスとジェネリック使う機会あってほー便利だなあって思った気がするな http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/40
41: 名前は開発中のものです。 [sage] 2023/09/13(水) 22:19:12.03 ID:b/7dbaPf >>39 自分は2Dはスキップしてるからその分は早いかもしれないね 2Dの学習が必要かをUnity始める前に少し調べたけど、どちらかというと否定的な見解が多い印象で、UIの制作でどうせその辺やC#を扱う必要も出てくるだろうから最初から3Dで始めた >>40 ChatGPT便利だよなあ 厳密には自分はBingの会話AI(GPT4.0をウェブ検索用にチューニングしたやつ)を使ってるけど(無料だから) 無料版の3.5も試したけどBingと比べて誤情報や変なコードの出現率が高いから断念した ステートマシンって現在の状況をノードで繋いだステートを行き来して色々とするものだっけ?(無知) UnityのAnimator(mecanim)がステートマシンらしいからいずれ覚える必要があるし、自分の作ってるUIも段々と状況設定がゴチャゴチャになってきたからそういうのを勉強して整理しなきゃなあ http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/41
42: 名前は開発中のものです。 [sage] 2023/09/13(水) 22:19:25.85 ID:b/7dbaPf 今日やった作業は主に二つ ?ディザ抜きを利用した障害物の透過 シェーダーアセットの基本機能を設定しただけ。キャラクターがワールド上の設置物の影に隠れて見えなくなってしまわないように、カメラ距離でディザリングを行うことで透けて見えるようにした。カスタムシェーダーにも対応してるアセットなので、勉強が進んだらキャラクターを隠しているか等の判定も加えてより高性能なものにしていきたい。 ?UIを実装するクラスの整理 一昨日から引き続きUIのコードを整理した。アイテム欄クラスと検索欄クラスでそれぞれ大体同じ処理を実装しているので、既に継承させていた抽象クラス(基底クラス)を拡張して派生クラスで実装していたコードを半分ぐらい移植した。アイテム欄クラスと検索欄クラスでは扱うコレクションの型が違っていたので(アイテム欄クラスはアイテムのインスタンス、検索欄クラスはintを扱っていた)、この二つのクラスにコレクションを渡すインターフェースをジェネリックを使って<T>にすることで抽象クラス(基底クラス)で処理を統一できた。これを実現するためにジェネリックを調べていたようなものなのでひとまず満足。 ただ渡されたコレクションから描画すべき情報を取得する処理はまだ統一できていないので明日以降に挑戦してみる。 ところでUI(でも何でも)作り始める前にはちゃんと設計図を作成しないとダメだね 検索システムに「ミニメニューを開いて利用するから〜」というテキト−な理由でMiniMenuUIってクラス名つけたんだけど、ふとミニメニューにアイテム並び替え機能も欲しくなって「MiniMenuUI = 検索システム」じゃなくなってしまったから、クラス名を付け直しになった 付け直し自体はVisualStudioのフォルダ全体置換機能を使ってすぐに終わったんだけど(異なるクラスでもフィールド名を統一しておいたのが功を奏した)、純粋に面倒だし変更し忘れが残っていたらどんなエラー吐くかも分からんし設計はちゃんとすべきだと思いました http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/42
43: 名前は開発中のものです。 [sage] 2023/09/13(水) 22:27:45.47 ID:HTnl4o+9 UIは何を使ってますん? UnityUIやMeshプロは将来無くなるとかで 自分はUIToolkitを勉強してます http://mevius.5ch.net/test/read.cgi/gamedev/1693399963/43
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 56 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.005s