ちなスペックは
コード作成は生成AI頼り・基礎的なコンポーネントの使い方すら理解してない・C#の経験皆無
こういうレベル
Unity初心者の俺が調べたことをメモするスレ
2023/08/30(水) 21:52:43.22ID:zQtYmNBI
2023/08/30(水) 21:58:13.30ID:zQtYmNBI
基礎的なことすら理解してないから一歩ずつ調べてメモしていきたい
今日調べたこと
・EventSystemとPlayerInputの実行順序について
Project SettingのScriptExecutionOrderでは、EventSystemが-1000・PlayerInputが-100の実行順既定値が設定されている
これを見るとEventSystemの処理の方がPlayerInputより先に行われるように見えるが、EventSystemによるUI操作はUpdate関数でInput.Actionを購読しに行く形で行われる一方、PlayerInputはPreUpdateのタイミングでInput.Actionを生成しイベントを発火させるので、実はPlayerInputによる関数コールの方がEventSystemのUI操作より先に行われる
今日調べたこと
・EventSystemとPlayerInputの実行順序について
Project SettingのScriptExecutionOrderでは、EventSystemが-1000・PlayerInputが-100の実行順既定値が設定されている
これを見るとEventSystemの処理の方がPlayerInputより先に行われるように見えるが、EventSystemによるUI操作はUpdate関数でInput.Actionを購読しに行く形で行われる一方、PlayerInputはPreUpdateのタイミングでInput.Actionを生成しイベントを発火させるので、実はPlayerInputによる関数コールの方がEventSystemのUI操作より先に行われる
2023/08/30(水) 22:04:40.12ID:zQtYmNBI
あとで見返すために番号付けとくか
なるべく毎日調べたこと書きたいね
なるべく毎日調べたこと書きたいね
2023/08/31(木) 18:16:21.62ID:SnlLP3DA
その2 I〇〇Handlerについて
Unityでは独自のインターフェースとして、ISubmitHandlerなどのUIイベント発生時にコールバックを受け取る機能が実装されている。
インターフェースという概念自体はあくまでクラス外部向けに内部実装の設計を規律するものにすぎず、I〇〇Handlerを実装してもC#としてコールバックを受け取る機能そのものが実装されるわけではない。
コールバックの発火は@ フォーカス、決定やキャンセルイベントなどEventSystemが発火を決定 → イベントを作成(BaseEventData) → ExecuteEventsに依頼してインターフェースを実装する該当クラスに送信してコールバックを発火するケースと、A マウスイベントなどInputModuleが自分でイベントを作成(PointerEventData) → ExecuteEventsに依頼して〜、という二つの異なるパターンがあるらしい(もっとあるかも)。
疑問としては、InputSystem導入後にInputModuleとInputSystemUIInputModuleの二つを統合するBaseInputModuleクラスが導入されたらしいが、この場合はマウスイベントを発火させるのは何処なのだろうか?
Unityでは独自のインターフェースとして、ISubmitHandlerなどのUIイベント発生時にコールバックを受け取る機能が実装されている。
インターフェースという概念自体はあくまでクラス外部向けに内部実装の設計を規律するものにすぎず、I〇〇Handlerを実装してもC#としてコールバックを受け取る機能そのものが実装されるわけではない。
コールバックの発火は@ フォーカス、決定やキャンセルイベントなどEventSystemが発火を決定 → イベントを作成(BaseEventData) → ExecuteEventsに依頼してインターフェースを実装する該当クラスに送信してコールバックを発火するケースと、A マウスイベントなどInputModuleが自分でイベントを作成(PointerEventData) → ExecuteEventsに依頼して〜、という二つの異なるパターンがあるらしい(もっとあるかも)。
疑問としては、InputSystem導入後にInputModuleとInputSystemUIInputModuleの二つを統合するBaseInputModuleクラスが導入されたらしいが、この場合はマウスイベントを発火させるのは何処なのだろうか?
2023/08/31(木) 18:16:23.48ID:SnlLP3DA
その2 I〇〇Handlerについて
Unityでは独自のインターフェースとして、ISubmitHandlerなどのUIイベント発生時にコールバックを受け取る機能が実装されている。
インターフェースという概念自体はあくまでクラス外部向けに内部実装の設計を規律するものにすぎず、I〇〇Handlerを実装してもC#としてコールバックを受け取る機能そのものが実装されるわけではない。
コールバックの発火は@ フォーカス、決定やキャンセルイベントなどEventSystemが発火を決定 → イベントを作成(BaseEventData) → ExecuteEventsに依頼してインターフェースを実装する該当クラスに送信してコールバックを発火するケースと、A マウスイベントなどInputModuleが自分でイベントを作成(PointerEventData) → ExecuteEventsに依頼して〜、という二つの異なるパターンがあるらしい(もっとあるかも)。
疑問としては、InputSystem導入後にInputModuleとInputSystemUIInputModuleの二つを統合するBaseInputModuleクラスが導入されたらしいが、この場合はマウスイベントを発火させるのは何処なのだろうか?
Unityでは独自のインターフェースとして、ISubmitHandlerなどのUIイベント発生時にコールバックを受け取る機能が実装されている。
インターフェースという概念自体はあくまでクラス外部向けに内部実装の設計を規律するものにすぎず、I〇〇Handlerを実装してもC#としてコールバックを受け取る機能そのものが実装されるわけではない。
コールバックの発火は@ フォーカス、決定やキャンセルイベントなどEventSystemが発火を決定 → イベントを作成(BaseEventData) → ExecuteEventsに依頼してインターフェースを実装する該当クラスに送信してコールバックを発火するケースと、A マウスイベントなどInputModuleが自分でイベントを作成(PointerEventData) → ExecuteEventsに依頼して〜、という二つの異なるパターンがあるらしい(もっとあるかも)。
疑問としては、InputSystem導入後にInputModuleとInputSystemUIInputModuleの二つを統合するBaseInputModuleクラスが導入されたらしいが、この場合はマウスイベントを発火させるのは何処なのだろうか?
2023/08/31(木) 18:33:55.46ID:SnlLP3DA
なんか多重送信されてるわ
「PlayerInputの方がEventSystemより実行タイミングが早い」っていう昨日の話だけ覚えておけば、どこが発火するかなんて正直割とどうでもいい気はするが念のため調べてみた。
ところでEventSystem(UnityのUI)って基本的にはイベントが発生したことは取得できるけど、「どういうキーが押されてイベントが発生したか」っていう情報を取得するのが難しい(できない?)気がする
例えば、画面上にA・B・Cの三つのUIが横並びで配置されていて、「B」がフォーカスを取得した時に発生させるイベントの内容を、直前のフォーカスが右にあったか左にあったかで条件分岐したい場合、
UIイベントが発生する原因となったキー操作そのものをEventSystemはEventDataに内包してくれる訳ではないっぽいので、工夫をしないとこの分岐は実現できなさそう
一つの案は直前までにフォーカスを取得していたA又はCにIDeselectHandlerを実装(又はSelectableがA・Cの基底クラスにあるならオーバーライド)して、フォーカスを失ってOnDeselectが実行された時に自身の情報をマネージャークラスに渡しておいてBにそれを見て判断させるという方法
この方法は分かりやすいけどUIのゲームオブジェクトが変動する・動的に生成される場合には「隣にいた」認定の処理が面倒になりそう
もう一つの案はPlayerInputを利用して、該当するキー入力があった際に入力があったことをマネージャークラスやBに渡す方法
BがAの方から来たなら右キー、Cの方向から来たなら左キーが入力されているはずなので、Bはこの入力情報を見ればどっちから来たかが分かるし、UI要素が変動しても対応しやすい
ただしイベント発火が絡む関係でパフォーマンス面では前者の手法に劣りそう
「PlayerInputの方がEventSystemより実行タイミングが早い」っていう昨日の話だけ覚えておけば、どこが発火するかなんて正直割とどうでもいい気はするが念のため調べてみた。
ところでEventSystem(UnityのUI)って基本的にはイベントが発生したことは取得できるけど、「どういうキーが押されてイベントが発生したか」っていう情報を取得するのが難しい(できない?)気がする
例えば、画面上にA・B・Cの三つのUIが横並びで配置されていて、「B」がフォーカスを取得した時に発生させるイベントの内容を、直前のフォーカスが右にあったか左にあったかで条件分岐したい場合、
UIイベントが発生する原因となったキー操作そのものをEventSystemはEventDataに内包してくれる訳ではないっぽいので、工夫をしないとこの分岐は実現できなさそう
一つの案は直前までにフォーカスを取得していたA又はCにIDeselectHandlerを実装(又はSelectableがA・Cの基底クラスにあるならオーバーライド)して、フォーカスを失ってOnDeselectが実行された時に自身の情報をマネージャークラスに渡しておいてBにそれを見て判断させるという方法
この方法は分かりやすいけどUIのゲームオブジェクトが変動する・動的に生成される場合には「隣にいた」認定の処理が面倒になりそう
もう一つの案はPlayerInputを利用して、該当するキー入力があった際に入力があったことをマネージャークラスやBに渡す方法
BがAの方から来たなら右キー、Cの方向から来たなら左キーが入力されているはずなので、Bはこの入力情報を見ればどっちから来たかが分かるし、UI要素が変動しても対応しやすい
ただしイベント発火が絡む関係でパフォーマンス面では前者の手法に劣りそう
2023/08/31(木) 18:49:55.41ID:/dI3F1uF
んなややこしいことせんと
先入れ先出しのスタック1つ作っておけば?
先入れ先出しのスタック1つ作っておけば?
2023/08/31(木) 19:22:23.67ID:SnlLP3DA
>>7
独自のデータロード式スクロールビューに利用するんだけどもう後者を採用(PlayerInput)して一応完成させたのよね
上下キーでは要素1個ずつ移動、左右キーでは表示エリア全部をページ送りする機能を実装したかったんだけど
A(画面上では不可視)
B
C
D
E
F
G(画面上では不可視)
この順に子要素が並んでいて、Aにフォーカスが入った時に上方向にデータロードして子要素を並び替え(上からGABCDEFになる)、Gにフォーカスが入った時下方向にデータロードして並び替え(BCDEFGAになる)をする感じで動く
例えばBにいる状態で下キーをを押しっぱなしにするとCDEFGAB…ってループしながらリストや配列の次のデータを読み込みながらフォーカスを変えていく
各子要素には上下方向は上下に、左方向はAに右方向はGにSelectableのナビゲーションを設定してるんだけど、このデータロードを行う際にB→AやF→Gのフォーカスの移行が「上下キー」で行われたのか「左右キー」で行われたのかを判別する必要があったのよね
それでPlayerInput使う方法を思いついた
独自のデータロード式スクロールビューに利用するんだけどもう後者を採用(PlayerInput)して一応完成させたのよね
上下キーでは要素1個ずつ移動、左右キーでは表示エリア全部をページ送りする機能を実装したかったんだけど
A(画面上では不可視)
B
C
D
E
F
G(画面上では不可視)
この順に子要素が並んでいて、Aにフォーカスが入った時に上方向にデータロードして子要素を並び替え(上からGABCDEFになる)、Gにフォーカスが入った時下方向にデータロードして並び替え(BCDEFGAになる)をする感じで動く
例えばBにいる状態で下キーをを押しっぱなしにするとCDEFGAB…ってループしながらリストや配列の次のデータを読み込みながらフォーカスを変えていく
各子要素には上下方向は上下に、左方向はAに右方向はGにSelectableのナビゲーションを設定してるんだけど、このデータロードを行う際にB→AやF→Gのフォーカスの移行が「上下キー」で行われたのか「左右キー」で行われたのかを判別する必要があったのよね
それでPlayerInput使う方法を思いついた
9名前は開発中のものです。
2023/09/01(金) 15:34:09.80ID:p9KeXpxb 普通に詳しいじゃん
2023/09/01(金) 18:06:12.03ID:jPfSgGL6
>>9
その都度調べてはいるけど結構忘れちゃうわ
自分のコードすら翌日見るとよく分からん
その3 ゲーム上のアイテムシステムの管理について
Unity特定の機能というよりどうやってこういう概念を実装したらいいのかな?って話
アイテムの入手と管理をどうやってゲームシステムとして実装するか
@ノベルゲー寄りの小規模なゲーム(アイテムは入手か未入手だけで特定の場面でしか利用しない。同じアイテムの複数個所持もない。)
正直一つずつbool値を設定して管理しても何とかなりそう。とは言っても場面毎に必要なアイテムを設定する際の利便性を考えると、スクリプタブルオブジェクト、Enumや通し番号あたりを割り振る必要性は結局あるかもしれない
A一般的なゲーム(それなりのアイテム数で複数個所持もある)
Dictionaryで、アイテム種類別管理データ(スクリプタブルオブジェクト、Enumや通し番号あたり)をキーに、値を所持数にして格納すると楽そう。
Bハクスラ要素のあるゲーム(同じアイテムでも性能が違っていたりする。Minecraftのエンチャントようなシステムもこのタイプ)
アイテム種類別管理データだけではなく、個別アイテムの管理データも必要になる。雑に調べた限りではこのパターンは意外とネットに情報がない。自分は購入したノーコード系アセットのサンプルゲームを見て、Dictionaryの値を個別アイテムインスタンスにする方法で実装できることを知った。
public class MyItem
{
private int itemNo; // アイテム種類別管理データに対応する enumでも何でもない
private int myAbility;// 個別データとか
}
こういうクラスを実装して、アイテム入手時にこのクラスのコンストラクターに個別情報を渡してインスタンス化して、そのままDictionaryに入れる。キーを0から始まる通し番号にでもしてキー自体を更に別のコレクションで管理すれば、疑似的なインデックスとして入手順にアイテムの個別インスタンスにアクセスすることも可能。(SortedDictionaryとどっちが早いかは未検証)
その都度調べてはいるけど結構忘れちゃうわ
自分のコードすら翌日見るとよく分からん
その3 ゲーム上のアイテムシステムの管理について
Unity特定の機能というよりどうやってこういう概念を実装したらいいのかな?って話
アイテムの入手と管理をどうやってゲームシステムとして実装するか
@ノベルゲー寄りの小規模なゲーム(アイテムは入手か未入手だけで特定の場面でしか利用しない。同じアイテムの複数個所持もない。)
正直一つずつbool値を設定して管理しても何とかなりそう。とは言っても場面毎に必要なアイテムを設定する際の利便性を考えると、スクリプタブルオブジェクト、Enumや通し番号あたりを割り振る必要性は結局あるかもしれない
A一般的なゲーム(それなりのアイテム数で複数個所持もある)
Dictionaryで、アイテム種類別管理データ(スクリプタブルオブジェクト、Enumや通し番号あたり)をキーに、値を所持数にして格納すると楽そう。
Bハクスラ要素のあるゲーム(同じアイテムでも性能が違っていたりする。Minecraftのエンチャントようなシステムもこのタイプ)
アイテム種類別管理データだけではなく、個別アイテムの管理データも必要になる。雑に調べた限りではこのパターンは意外とネットに情報がない。自分は購入したノーコード系アセットのサンプルゲームを見て、Dictionaryの値を個別アイテムインスタンスにする方法で実装できることを知った。
public class MyItem
{
private int itemNo; // アイテム種類別管理データに対応する enumでも何でもない
private int myAbility;// 個別データとか
}
こういうクラスを実装して、アイテム入手時にこのクラスのコンストラクターに個別情報を渡してインスタンス化して、そのままDictionaryに入れる。キーを0から始まる通し番号にでもしてキー自体を更に別のコレクションで管理すれば、疑似的なインデックスとして入手順にアイテムの個別インスタンスにアクセスすることも可能。(SortedDictionaryとどっちが早いかは未検証)
2023/09/01(金) 18:09:01.68ID:jPfSgGL6
コンストラクタに渡して〜って言ったけどコードにコンストラクタ含めてなかったわ
自分のプロジェクトではもうちゃんと実装しているからセーフ(適当)
自分のプロジェクトではもうちゃんと実装しているからセーフ(適当)
レスを投稿する
ニュース
- マイナ保険証「メリットなし」が最多 1.1万人調査で見えた“不安と様子見” ★2 [♪♪♪★]
- タワマンに戻りたい…子どものため郊外の庭付き一軒家に引っ越した世帯年収1,600万円の40代パワーカップル「心底後悔しています」 ★4 [樽悶★]
- カズレーザー「サンタクロースはいない」「買ってくれた親に感謝」発言に“視聴者から苦情”で「バカじゃねーの?って本当に思う」★2 [muffin★]
- 【おこめ】コメ価格は「損切り」間近か 卸最大手・神明社長の「暴落」発言の真意とは 「5キロ3500円」は実現するか ★2 [ぐれ★]
- 「女子は数学が苦手」「トップ層は男子」という“常識”に根拠なし? 国際的学力調査が示す事実 [♪♪♪★]
- 【赤坂サウナ火災】「賠償額は2億円超」弁護士が指摘。経営者の夫妻に小さな子がいたことも、慰謝料の高額化に [ぐれ★]
- 【U-NEXT】プレミアリーグ総合 ★46
- とらせん モレッタ獲得 ★3
- ハム専
- はません
- 【DAZN/ABEMA】ブンデスリーガ・DFBポカール★7
- 【ATP】テニス総合実況スレ2025 Part 214【WTA】
- 元ホロライブ沙花叉クロヱ(字書けない、お風呂入らない、霊感ある)←これ何だったの?
- 趣味が将棋 競馬 サッカー観戦 楽器はアルトサックスなんだけど
- 歳取るとホント何も楽しくなくなる [943688309]
- しつこいぞ
- 働けや殴りダムたる馬鹿無職🏡
- 声優の佐倉綾音さん、お父さんとパチリ
