[過去ログ]
【ゲームエンジン】Unityなんでも質問スレpart12 (1002レス)
【ゲームエンジン】Unityなんでも質問スレpart12 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
243: 名前は開発中のものです。 [] 2023/11/26(日) 11:00:07.84 ID:ap8K17/p こうなる↓ public class GameManager : MonoBehaviour { GameObject prefab; Hogehoge[] hogehoges; private void Start() { hogehoges = new Hogehoge[10]; for (int i = 0; i < hogehoges.Length; i++) { GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する hogehoges[i] = obj.GetComponent<Hogehoge>(); // 複製オブジェクトからHogehogeコンポーネントを取得して、配列hogehogesにぶち込む obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更 obj.localPosition = Quaternion.identity; // 角度を変更 } } private void Update() { for (int i = 0; i < hogehoges.Length; i++) { hogehoges[i].変数A = hogehoges[i].変数A + 1; // 【A】 } } } こうすれば毎フレームのHogehogeのアクセスはクラス変数にキャッシュした値へのアクセスになるので、パフォーマンスは最適化されたことになる GetComponentもそうだしInstantiateもそうだけど、UnityEngine傘下で定義された変数や関数は高コストという認識でおk Hogehoge[] hogehoges; みたいに自分で作成したコンポーネントやクラスの傘下に定義された変数や関数なら低コスト http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/243
244: 名前は開発中のものです。 [] 2023/11/26(日) 11:18:12.87 ID:ap8K17/p あ、>>243 obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更 obj.localPosition = Quaternion.identity; // 角度を変更 は obj.transform.localPosition = new Vector3(i, 0f, 0f); // 位置を変更 obj.transform.localPosition = Quaternion.identity; // 角度を変更 が正しい でも、このobj.transformもUnityEngine傘下の変数なので・・・あとは分かるだろうか http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/244
260: 名前は開発中のものです。 [] 2023/11/26(日) 14:29:32.88 ID:J5rQpI/4 現状、 <GameManager.cs> void Update() { for (int i = 0; i < Array01.Length; i++) { if(i == 10){ this.objects[0].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A; }else{ this.objects[i+1].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A; } } で正しく動いてくれました。 で、>>243さんのご指摘にある「GetComponentをupload()に書くのは好ましくない」というご意見から 今、>>243さんの記述してくれたコードを理解して それを実装して、これと同じことを再現しようとしています。 ただ、this.objects[添字].GetComponent<Hogehoge>().変数名;という1文だけで 済んでいる現状で問題ないなら分かりやすいこの記述方法で行きたいなあというのが正直なところです。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/260
264: 名前は開発中のものです。 [] 2023/11/26(日) 14:48:03.88 ID:J5rQpI/4 >動けばなんでもOKだろうから いや、そこまで妥協したいというわけでも無いです。。。 その、>>243にあるコードって、 現在自分が書いてる<gamemanager.cs> public GameObject[] Array01; void Start(){ Array01 = new GameObject[10]; GameObject obj = (GameObject)Resources.Load("プレハブ名"); for (int i = 0; i < Array01.Length; i++) {Array0[i] = Instantiate(obj, new Vector2(i,0.0f), Quaternion.identity);} } で、いうと、 GameObject型の配列じゃなく、prefabのクラス型で配列を宣言して、 あとは同じことをしてその配列に突っ込みなさいって感じですか? で、prefabのクラス型で配列で作ったら、いちいちGetComponentしなくてもいいよって 理解で正しいですか? http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/264
273: 名前は開発中のものです。 [] 2023/11/26(日) 17:30:21.75 ID:J5rQpI/4 すみません、 >>243さんのコード試してみてるのですが GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する で、 「インスタンス化したいオブジェクトが null です」とエラーが出ます。 自分もコードみてて気になってたんですが、 自分が書いてたコードの時でいうところの GameObject obj = (GameObject)Resources.Load("プレハブの名前");みたいに どこかでプレハブ化しているオブジェクトの名前を記述しなければならない気がするんですが 違いますか? 例えば、 public GameObject prefab; void Start() { GameObject obj = Instantiate(prefab); } これでは、prefabにはなにも入っていません。 記述漏れかな?とか。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/273
281: 名前は開発中のものです。 [] 2023/11/26(日) 18:32:14.78 ID:J5rQpI/4 うおおおおおおおおおおおおお!!! すごいっす!!!! >>243さん、すごいっす!!! update()内にGetComponent無しで 完全に一緒の状況になりました!!! これで前より軽くなってるってことですよね! すごいっす!感動です! http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/281
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.033s