Unity初心者の俺が調べたことをメモするスレ (99レス)
上下前次1-新
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
67(1): 2023/09/20(水)22:22 ID:9mke4B6g(1) AAS
おそらくはまだCPUがショボい頃の事が今でも尾を引いてらのかもね
68: 2023/09/20(水)22:30 ID:6f4RNUvQ(3/3) AAS
>>67
あと可能性があるとしたら、TransformへのアクセスはUnityのバージョンアップで最適化がされたことがあるそうで、GetComponentもそうなのかもしれん(調べてない)
・今日の作業
今日の作業は昨日と変わらず、重い処理関係以外で特に何も調べたりはしなかった
引き続き設計思想の話としては、インスペクターから値・参照を設定・確認できるのは便利である一方で、Unityに慣れるにつれてインスペクターから設定しなくてはならないのはコードとインスペクターの双方を行き来する必要があって面倒だとも感じてきた
UnityにはEventTriggerなど便利なコンポーネントが存在しているが、一部は自分でスクリプトを組めば代替できるものもある
GameObject.Find系が推奨されないもう一つの理由として「制作途中の仕様変更に弱い」という指摘があるが、これにはコードとインスペクターだけではなくヒエラルキーも動作確認の際にチェック対象になってしまう煩雑さを回避したいという願いが暗に含まれていそうだ
69: 2023/09/21(木)22:13 ID:+9E6IOzm(1) AAS
今日は自作のインベントリシステムに並び替え機能の実装を始めた
List.Sortで自作クラスをソートするにはIComparableインターフェイスを継承してCompareTo関数を実装するか、又はラムダ式で直接ソート順を指定することでも可能となる
ラムダ式は匿名関数を作成するもので、内部的には最初に実行される時のみnewされて関数が生成されてそれ以降はコンパイラが自動的にそれを使い回してくれるそうなのでアロケーション面でも優しい
Unityでお世話になる時は大体ソート関係な気がする
70(1): 2023/09/22(金)02:12 ID:2ujM814X(1/2) AAS
Linp使えるからSQL的なSelect,Whereなんかも使ってもいいね
71: 2023/09/22(金)02:14 ID:2ujM814X(2/2) AAS
すまんLinqだスマホだから打ち間違えた
そしてpもqもパッと見見分けつかんからそのまま送信してしまった
72(1): 2023/09/22(金)21:58 ID:TT/FNhBR(1) AAS
>>70
LINQは便利そうな機能が一通り揃ってるのね
ただ前に使ってみた時に(どの関数かは忘れた)素直にForやForeachでやるのと比べて凄い量のアロケーションが出てたから使うのやめちゃってたわ
インベントリ内アイテムの並び替えみたいな、そう頻繁に行われない処理にはLINQの使用を再検討してみようかな
直接並び替え用の式を書くと後で見た時に大抵「何だっけこれ…」ってなるから…(まずコード上の注釈を再読む所から始まる)
今日も並び替え機能の実装を進めた
そういえばクラス間の情報のやり取りで静的イベント(public static event Action<>〜)はよく使っているけど、Funcはまだどこにも利用してないと思った
省2
73(1): 2023/09/22(金)22:10 ID:1GHnfQ7l(1) AAS
適切にコンパイルされたか否かって何かToolとかあるんです?
74(1): 2023/09/23(土)13:04 ID:pGEksIgm(1) AAS
>>72
たしかにLinqは便利な分最適化には程遠いかも
75: 2023/09/23(土)17:27 ID:bmDBxj8t(1/3) AAS
>>73
いや分からない(知らない)
コンパイルすら通らないのかコンパイルは通るけど使い方間違えると実行時エラーでるのかが分からないからそう書いただけ
>>74
便利だけどゲームだと使い道が難しそうな印象があるなあ
今日の作業で久しぶりにLINQ使ってみたけど、FindAllしたら新しいList<T>インスタンスが戻り値として生成されるみたいで結構な量のアロケーションが発生しちゃった
Forで要素0からループで走査して条件一致する度にグローバルな使い回し用リストにAddするとアロケーション無しになる
省1
76: 2023/09/23(土)17:50 ID:bmDBxj8t(2/3) AAS
そういえばFuncでリスナー複数いるとどうなるの?問題についてちょっと検証してみたそういえばFuncでリスナー複数いるとどうなるの?問題についてちょっと検証してみた
using System;
using UnityEngine;
public class TestClass : MonoBehaviour
{
// 静的アクション
public static event Func<int,int> testFuncEvents;
省13
77: 2023/09/23(土)17:51 ID:bmDBxj8t(3/3) AAS
改行と文字数の限界でコード貼るのは無理か
結論としては
? 変数に代入される戻り値は一番最後に登録されたリスナーのものになる
? 最後のリスナーのみがプロパティをコールする。リスナーは3人いるのにプロパティは1回しかコールされなかった(リスナーは3人ともデバックログが出たが、プロパティは1回しか出なかった)
? nullはnullじゃない文字列と連結しようとすると空白になるが、単体又はnullと連結しようとすると文字列はNullになる
まあリスナーの管理が面倒だからたしかにChatGPTの言う通りFuncはイベントで扱うべきじゃないのかも?
78: 2023/09/24(日)22:38 ID:S8roHB1T(1) AAS
今日の作業はクラスの設計を考えた
「カプセル化」をすることでクラスを他の処理にも再利用できるので、静的イベントやインターフェースを駆使して様々な「選択」が必要なUI画面で利用できる独自セレクタブルを作りたい
79: 2023/09/25(月)21:40 ID:Lma5XPF1(1) AAS
今日はグラフィック関係をやっていてコードにあまり触れてないので調べ物はナシ!
enumのSwitch式だかSwitch文だかをもう少し書きやすくする方法ないかなとは思ったり
80: 2023/09/26(火)21:52 ID:2Scqx0S0(1) AAS
制作が軌道に乗ってくるとメモすることがなくなるんだよな
既に調べた知識で作り続けるだけだから
だいぶ先になるけど有料アセットのうちFinalIKとEasySaveは詳しく使い方を覚えたいし覚えたら書くかねえ
特にFinalIKはUnity標準のメカニムとどのくらい共用できるのか知りたい
81(1): 2023/09/28(木)22:06 ID:dc32lg9p(1) AAS
製作順調なら製作進捗でもいいんだよ
82: 2023/09/29(金)19:51 ID:4YW0vA30(1) AAS
>>81
それはアリだねただ一応秘密で作ってるんでどこまで内容書くかは悩みどころだが
今やってるのはアイテム合成システムの設計
合成時に素材の特殊能力を引き継ぐのだが、異なる特殊能力同士が合体して新たな特殊能力に変わるシステムをどうやって実装するか考えている
一番手っ取り早そうなのは、
①素材アイテムの特殊能力をコレクションに格納する→②コガネブログからお借りした組み合わせ列挙拡張メソッドを使って事前に指定した合体組み合わせに該当するか調べる→③合体組み合わせが不存在になるまで繰り返す
かなと思っている
83(1): 2023/09/30(土)07:12 ID:HN5eRe95(1) AAS
俺もちょうど合成システム作ってるとこでビビった
俺は2つのarrayをソートして、比較する単純なものだけど…
84: 2023/09/30(土)22:25 ID:AozLAQh5(1) AAS
>>83
合成が合成システムを実行したその1回しか行われないならそのやり方の方が楽そう
自分のは合成して特殊能力が合体した際に次レベルの合体条件も満たしていたら順次合体を繰り返していく機能を想定しているから、配列やリストを何回も走査すると重いかもなあという懸念がある
ただコガネブログのも合体成立時に何回も呼び出すと重そうなので、素材アイテムの持つ特殊能力の管理番号全てをHashSetに入れて、差集合とAddを使って合体組み合わせを探していくのもアリかも
こればっかりは自分の設計に合わせて複数のコードを組んで検証してみるしかないね
85: 2023/10/04(水)01:17 ID:1pamoYKo(1) AAS
おや?停滞?
良スレかと思ってたが、中途半端に投げ出す感じな
86: 2023/10/04(水)17:41 ID:DAn/y1Is(1/2) AAS
今は既に調べておいた知識でゆっくり作っている状況だから特に書くことが無いのよね
グラフィックス関係の勉強もしてるんでそっちに多く時間を割いてるのもある
一応調べたことの備忘のスレのつもりなんで、何も調べてないのに毎日作業内容を報告するのもなんか違うと思うし
あと単純に最近安定して5chが見られなくないか?
基本的にメモは作業用ではないPCのEdgeで書いてレスしてるけど、今もまたスレが開けなくて内容ドライブ経由でコピーしてスマホからレスした
今やってる作業はアイテム合成システムのクラス設計、メニュー画面・装備画面UIの作成あたりかな
ゲームシステムについての最近考えている事は
省7
87: 2023/10/04(水)17:42 ID:DAn/y1Is(2/2) AAS
C#・Unityの勉強としては
・非同期処理
上でも書いたがよく分かってない。今作っている範囲だと用途は少なそうだけど、唯一「アイテムを大量に捨てる場合」に役立ちそうな気がしている。
というのもアイテムを捨てる際には自作のアイテム管理クラスのアイテム破棄の関数をコールするのだが、検索システムに備えて入手時にコレクションへの登録を沢山しているので破棄時には逆にコレクションからの削除を行う必要がある
アイテム捨てる処理は入手処理と違って新たなインスタンスはほぼ生成しないのでGCの問題はないが、単純にコレクションへのアクセスが多いのと、プレイヤーが何百・何千個ものアイテムを一気に捨てることができるUIを組んでしまったので大量にアイテム破棄を行うと余裕で60fps割ってしまう。また所持品管理ディクショナリーの参照が切れるのでアイテムインスタンス自体もガベコレの対象になるのでガベコレによるスパイク発生の危険性も高くなる。
そこで非同期処理を用いてフレームを分散してアイテムの破棄を行えば、捨てる処理自体のスパイクは軽減できるかなと思った
プレイヤーは1f単位で処理を認識している訳ではないので、内部的には数fに分離しても多分気が付かない(あまりに重い場合は「アイテムを捨てています」等の進捗を画面に表示した方がよさそうだけど)
省1
88(1): 2023/10/07(土)18:13 ID:zKcOYlJC(1) AAS
自分はインボーク、インボークリピートをもっぱら使うなぁ
89: 2023/10/07(土)21:08 ID:AbV00O8h(1/3) AAS
>>88
InvokeやInvoke.RepeatingはMonoBehaviourの機能だから個人的にあまり使いたくないなあと思ったり(他のクラスに移植したり仕様変更する際に面倒そうなので…)
引数にstring型使うからアロケーションも心配
ただアタッチ先ゲームオブジェクトだけで完結する処理ならそれが手っ取り早そうだね
90(2): 2023/10/07(土)21:19 ID:iuLYjSS8(1) AAS
でも引数はメソッドの名称だからアロケーション発生しないんじゃね?
91: 2023/10/07(土)22:01 ID:AbV00O8h(2/3) AAS
>>90
エディタ上でテストプレイしてみたけど。確かにMonoJIT以外でのアロケーションは発生しないね
原因について雑に調べたけど、もしかしたら文字列リテラルだからコンパイル時に生成・メモリに格納されて一致する限りは使い回しがされるからっぽい
92: 2023/10/07(土)22:01 ID:AbV00O8h(3/3) AAS
>>90
エディタ上でテストプレイしてみたけど。確かにMonoJIT以外でのアロケーションは発生しないね
原因について雑に調べたけど、もしかしたら文字列リテラルだからコンパイル時に生成・メモリに格納されて一致する限りは使い回しがされるからっぽい
93(1): 2023/10/07(土)22:23 ID:ABeNJcDO(1) AAS
潔癖症みたいやねそこまで気にするのって
94(1): 2023/10/08(日)09:30 ID:raa6/Dtd(1) AAS
非同期処理はコルーチンしか使ったことないや
95: 2023/10/08(日)21:22 ID:9d1oOF7A(1) AAS
>>93
GCallocは削れば削るだけ良いからね
自分はECSを使うのは現状では無理そうだから削減可能な場所は全て対応するようにしている
>>94
MonoBehaviourで非同期処理を扱うならコルーチンが入門な感じがあるね
返し値を扱うのが面倒そうなのが難点だけどそれでもUniTaskよりはとっつきやすそう(偏見)
96(1): 2023/10/08(日)21:32 ID:RWVJHt61(1) AAS
今のパソコンというか環境でも
やはりけづれる物は削る方がいい?
初心者とかそこまで考える必要はあるのかな?
97: 2023/10/09(月)14:29 ID:rvC4W/MI(1) AAS
>>96
明らかなボトルネックや安定した後の最適化ならともかく、開発中はできるだけ素直でメンテナンスしやすいコードの方が良いよ
98: 2023/10/25(水)17:52 ID:lBkP/TA2(1) AAS
進捗どうですか?
99: 2023/11/15(水)23:27 ID:Qaq3TktU(1) AAS
エタったか
無駄なスレ建ててまで書くなよ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s