[過去ログ]
【ゲームエンジン】Unityなんでも質問スレpart12 (1002レス)
【ゲームエンジン】Unityなんでも質問スレpart12 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
229: 名前は開発中のものです。 [] 2023/11/26(日) 07:27:15.33 ID:J5rQpI/4 完全につまずいてしまいました。どうかお知恵を貸してください。 配列[10]に詰め込んだオブジェクトの中に変数aがあります。 ゲームマネージャーの方で毎回for文で配列の要素内の変数aを確認して、 該当した場合にそのオブジェクトの変数bにtureを代入する。 ということをやりたいです。 文字で説明するとしごく単純な作業なんですが、これがうまくいきません。 自分の考え方としては、ゲームマネージャーの方で配列内を確認するために for (int i = 0; i < 10; i++) { if(配列[i].変数A < 2) { 配列[i].変数B = true; } } してやるだけなはずなんですが、、、、 この配列はゲームマネージャーで最初宣言したもので、 配列内の変数は各オブジェクトがもっているものです。 各オブジェクトには読み書きできるメソッドは作ってます。 public int 変数A{ get { return 変数a; } set { 変数a = value; } } public bool 変数B{ get { return 変数b; } set { 変数b = value; } } でも、下記のままでは「GameObject」には「変数A」の定義が含まれておらず〜」とエラーが出ます。 for (int i = 0; i < 10; i++) { if(配列[i].変数A < 2) { 配列[i].変数B = true; } } これが機能するようにするために、何が足りないのか、教えてください。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/229
232: 名前は開発中のものです。 [] 2023/11/26(日) 09:05:47.93 ID:J5rQpI/4 >>230 >文面から配列にはGameObjectが入っているものと推測する その通りです。 >それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする Hogehogeクラスとします。 >この場合、配列はGameObject[]ではなくHogehoge[]でないといけない ここの意味が理解できません。 ゲームマネージャークラス内で宣言した配列に、オブジェクトを入れています。 Hogehogeという名の配列はどこにも存在していません。 それでもHogehoge[]を記述できるんですか? でも for (int i = 0; i < 28; i++) { if(Hogehoge[i].変数A < 2){ Hogehoge[i].変数B = true; } } ではエラーになりました。 「「Hogehoge」はタイプです。指定されたコンテキストでは無効です」というエラーです。 Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();を使う場合だと 「型または名前空間名 'Hogehoge' が見つかりませんでした」とエラーになります。 >GameObjectはGameObjectの情報しか持ってないので、 >Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない ここの理屈は理解できます。。。 記述するとき「配列[1].Hogehoge.変数A」見たくなる感じですか? http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/232
235: 名前は開発中のものです。 [] 2023/11/26(日) 09:47:00.82 ID:J5rQpI/4 >>234 理解しています。 ここではHogehogeと記載してますが ちゃんと変数Aを記載しているクラス名を コードの方では書いてるんです。 それでも>>232に書いたエラーになります。 シングルトンしてないとダメとか、 ゲームマネージャーのスクリプトのusingに記載しないといけないとか 別にないですよね?? http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/235
236: 名前は開発中のものです。 [] 2023/11/26(日) 10:01:19.86 ID:J5rQpI/4 <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);} } <prefab_object.cs>←プレハブ化したオブジェクトにくっつけてます public int variable_a = 0; public int Variable_a{ get { return variable_a; } set { variable_a = value; } } 簡易版で説明しますと、↑この状況なだけです。 これで、<gamemanager.cs>のvoid Update()の中で<prefab_object.cs>のVariable_aを利用したいんです。 <gamemanager.cs>内に 「Debug.Log(Array01[0].Variable_a);」と記載したらエラーが出ます。 「Debug.Log(prefab_object[0].Variable_a);」と記載したらエラーが出ます。 「Debug.Log(Array01[0]);」と記載してもエラーが出ます。 「Debug.Log(prefab_object[0]);」と記載してもエラーが出ます。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/236
240: 名前は開発中のものです。 [] 2023/11/26(日) 10:39:04.38 ID:J5rQpI/4 >>239 >教えすぎないほうがいいのかなあ そんなことありません。 正解を教えて頂いたあと理解するため自分で何度も理解する様努めますし。 もちろん、理解しないままでいいやって人もいるでしょうけど 自分は次から自分のものにしないと意味がないとわかっているので 答えを知ったら終わりのつもりありません。 ただ、自力で答えにたどり着くには独学や人の限られたブログなどでは 行き着けない場合もあるんです。 そんな時、あなたの様にスパッと答えを教えて頂けるのは非常にありがたいと思っています。 ありがとうございます。 すみません、 >Hogehogeの変数を定義しておきそれにアクセスするほうが低コスト >public Hogehoge[] hogehoges; について、もう少し具体的に解説お願いできないでしょうか。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/240
241: 名前は開発中のものです。 [] 2023/11/26(日) 10:48:37.62 ID:J5rQpI/4 >毎フレーム実行する必要がある場合などは >GameManager.csのクラス変数に >Hogehogeの変数を定義 public Hogehoge[] hogehoges; これでHogehoge型の配列を作っても hogehogesはまだ空の状態ですよね? hogehoges = new Hogehoge[10];みたいなのやんないと アクセスできませんか? http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/241
256: 名前は開発中のものです。 [] 2023/11/26(日) 14:13:45.97 ID:J5rQpI/4 神々が言い争ってるみたいですが、 結局、私はupdate()内でGetComponent() を記載しまくっても さほど問題にはならないということでしょうか? http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/256
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
271: 名前は開発中のものです。 [] 2023/11/26(日) 15:33:06.23 ID:J5rQpI/4 >>266 ありがとうございます。がんばります!! 絶対Unityから逃げません! 今作ってる処女作が完成したら、ここで皆さんに配布させてください! 絶対「面白い」って言わせてみせます! (それまでに何度かまた障害にぶつかると思うんでまた相談させてください) http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/271
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
277: 名前は開発中のものです。 [] 2023/11/26(日) 18:17:53.87 ID:J5rQpI/4 >>275 ほんとだ、ゲームマネージャーのスクリプトのインスペクタに prefabの枠ができてました! 初歩的なことかもしれませんが プレハブ化したオブジェクトをその枠にドラッグしようとしたら プレハブクリックしたらプレハブのインスペクタに切り替わっちゃうんですが これ、どうすればいいんですか?^^; http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/277
278: 名前は開発中のものです。 [] 2023/11/26(日) 18:19:48.20 ID:J5rQpI/4 あー、すみません。 ドラッグじゃなくて、枠のほうで選べるんですね すみません。解決しました。 http://mevius.5ch.net/test/read.cgi/gamedev/1699257023/278
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.029s