[過去ログ] 【ゲームエンジン】Unityなんでも質問スレpart12 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
230
(1): 2023/11/26(日)07:46 ID:ap8K17/p(1/15) AAS
文面から配列にはGameObjectが入っているものと推測する
それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする
この場合、配列はGameObject[]ではなくHogehoge[]でないといけない
あるいはGameObjectの配列の要素に対してGetComponentしてHogehogeを取得する
 Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();

GameObjectはGameObjectの情報しか持ってないので、Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない
237
(1): 2023/11/26(日)10:02 ID:ap8K17/p(2/15) AAS
// Hogehoge.cs
public class Hogehoge : MonoBehaviour
{
 public int 変数A{ get { return 変数a; } set { 変数a = value; } }
 public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
}

// GameManager.cs
省14
239
(1): 2023/11/26(日)10:32 ID:ap8K17/p(3/15) AAS
教えすぎないほうがいいのかなあ
242
(1): 2023/11/26(日)10:59 ID:ap8K17/p(4/15) AAS
>>240
C#というかUnityと付き合っていけばいずれパフォーマンスの最適化という壁にぶち当たる日が来る
そうなった時、というかそうなった時には大抵手遅れだから、同じ結果が得られるならコストが低い処理を極力使ったほうがいい

GameObject obj1; という変数があるとして、このobj1にアタッチされたHogehogeコンポーネントにアクセスしたい場合
 Hogehoge hooo1 = obj1.GetComponent<Hogehoge>();
でアクセスすることは可能

ただしGetComponentを1回実行すると、GC.Allocというメモリ上のゴミが発生する上にこれ自体の所要時間も結構なものだから、GetComponentはコストが高い
省3
243
(5): 2023/11/26(日)11:00 ID:ap8K17/p(5/15) AAS
AA省
244: 2023/11/26(日)11:18 ID:ap8K17/p(6/15) AAS
AA省
248: 2023/11/26(日)12:39 ID:ap8K17/p(7/15) AAS
あああ配列を生成するためのGCが発生してんのか
nameとかtagみたいにアクセスするだけでGCが発生する組だと思ってた

UpdateでGetComponentするなは割とよく言われてる気がする
外部リンク:www.google.com
252
(1): 2023/11/26(日)13:33 ID:ap8K17/p(8/15) AAS
2022/8/15 サイバーエージェントのパフォーマンスチューニングバイブル
外部リンク:github.com

9.3 コンポーネントの取得
同じ GameObject にアタッチされている他のコンポーネントを取得する GetComponent() も注意が必要な 1 つです。
前節の tag プロパティや name プロパティ同様にネイティブコードで実装された処理を呼び出していることもそうですが、指定した型のコンポーネントを「検索する」コストがかかることにも気をつけなければなりません。
下記サンプルコードでは毎フレーム Rigidbody コンポーネントを検索するコストがかかることになります。頻繁にアクセスする場合は、あらかじめキャッシュしたものを使い回すようにしましょう。

毎フレーム GetComponent() するコード
省5
253: 2023/11/26(日)13:35 ID:ap8K17/p(9/15) AAS
ついでに2022.3.10f1で検証してきた
画像リンク[png]:i.imgur.com

この差を気にするか気にしないかはきのこたけのこ張りの宗教戦争なので、きのこが好きかたけのこが好きかによって意見が真っ二つやね
258: 2023/11/26(日)14:21 ID:ap8K17/p(10/15) AAS
その当たり前の物差しが万人共通であればの話ね
262: 2023/11/26(日)14:38 ID:ap8K17/p(11/15) AAS
まあ今はUnity勉強中で動けばなんでもOKだろうから毎フレームGetComponentでも別に問題ないよ
ただ259みたいな宗派もいることは頭の片隅に置いといてね
266
(1): 2023/11/26(日)14:58 ID:ap8K17/p(12/15) AAS
>>264
それで大丈夫

ちなみに今ここには《動けばいい派 >>245》《コードに無駄が無ければいい派 >>261》《可読性を落としてでも速度を最重視したい派 ワイ》がおるでな
Unityへの理解が深まれば宗派も二転三転すると思うけど頑張って
270: 2023/11/26(日)15:25 ID:ap8K17/p(13/15) AAS
Unity2019辺りで
 GameObject obj = Instantiate(prefab);
 DestroyImmediate(obj);
 Debug.Log(obj?.name);
みたいなコード書いたらヌルポだったんだけど、Unity2022辺りは改善されたのかな
こういう細かい仕様って今日みたいな機会でもないとわざわざ調べる気にならんのよね・・・
275
(1): 2023/11/26(日)17:49 ID:ap8K17/p(14/15) AAS
>>273
MonoBehaviourを継承したスクリプトがアタッチされたオブジェクトが予めシーンのどこかに配置されてる前提になるけど、このオブジェクトを選択するとInspectorにpublicの変数が表示されてそこにオブジェクトを指定したりできるようになる
243はその前提のコードになってる
289
(2): 2023/11/26(日)20:39 ID:ap8K17/p(15/15) AAS
Physics.Raycastを嫌う理由がGC発生によるパフォーマンスの低下だとするなら、Physics.RaycastNonAllocを使えばいい
使ったことないけどOverlapSphereも同様らしい
GC発生を嫌ってるわけではないとなると目的が不明瞭なので適切な提案ができない
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.725s*