- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
595 :名前は開発中のものです。[sage]:2017/12/14(木) 16:33:17.08 ID:On7lkIBu - >>591
元々Unityは初心者用ゲーム制作ツールじゃないよ >これじゃプログラマー用の補助ソフトじゃねえか まさにその指摘通りの代物だよ最初から
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
597 :名前は開発中のものです。[sage]:2017/12/14(木) 16:45:41.85 ID:On7lkIBu - 話しをぶった切るが
色々細かい事気にせず作れるようになってて優秀な開発環境だなと思い 他の環境だと繊細に気を遣わないといけなような事も気にせず3ヶ月ガンガン進めて来ていたが ついにイベントサイクルの関係で、実行してくれない物が出てきたわ @→A→B、という流れになるようにコード書いてるのに 実際は@→B→A、みたいになり期待した結果にならない感じ 具体的には 「親Object(AScript)→子Object(BScript)→孫Object(CScript)」という構成のプレハブを リソースからInstantiateしたと同時に、親Object(AScript)から孫Object(CScript)のpublic関数を呼び出し その関数内で孫に対する色々な初期化やってるんだが Visible類の初期化がうまくいかないわ おそらくコード上のInstantiateを実行した段階では、実際にまだフィールドにはPrefabが生成されていなくて 先に親Object(AScript)から孫Object(CScript)のpublic関数の処理が、生成されていないPrefabのvisible系に対し 実行されてるから変化しないんだと憶測している。 やっぱりこの手のタイミング部分はUnity信用しきってやらず 今まで通り気を遣ってプログラミングするべきだったのね・・・( ^ω^) 大きくやり方変えないといけなくなったチクショウ!・・・orz
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
607 :名前は開発中のものです。[sage]:2017/12/14(木) 18:28:35.77 ID:On7lkIBu - 確かに金は全て解決してくれる魔法力
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
610 :名前は開発中のものです。[sage]:2017/12/14(木) 18:50:27.75 ID:On7lkIBu - 「金だけ」では当然ダメだよw
特に今は開発と同じくらい宣伝の方にも金まわさないとさ このゲームもTVCM出しまくってれば運命は変わってたかもよ
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
612 :名前は開発中のものです。[sage]:2017/12/14(木) 19:06:34.50 ID:On7lkIBu - うみょー直った
初心に帰り単純な方法思いついて試したら直った 今回また1つ学べたわ Instantiate()で生成した物を、直後にGameObject.Find()で見つけ出そうする処理は気を付けた方がいい staticではないpublicなりグローバルなりに参照格納してそっちから扱った方がトラブルなくてよさげ
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
615 :名前は開発中のものです。[sage]:2017/12/14(木) 19:09:32.05 ID:On7lkIBu - というような事がちらほらあるから
全くの初心者には無理でしょうというお話し 色々経験していないと原因追及と回避できるわけがない
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
616 :名前は開発中のものです。[sage]:2017/12/14(木) 19:13:48.60 ID:On7lkIBu - >>614
そういう方向性も考えてはいたが今後トラブッた時にさらに複雑になりそうなので採用せんかった シンプルに直して先を急ぎたかった
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
625 :名前は開発中のものです。[sage]:2017/12/14(木) 23:45:13.38 ID:On7lkIBu - >>618
原因わかった今ならすっきりだが検証中は原因究明に本当に苦戦したよ 簡単にまとめると次のような処理 void func(){ @ for(〜){ Destoryでステージ上の全落ちてるアイテムを一旦削除 } A for(〜){ Instantiateで新しいアイテムをフィールドにばら撒く } B for(〜){ 新しくばら撒いたアイテムの中にあるスクリプトをGameObject.Findで呼び出しながら アイテムを初期化していく } } この処理がうまく機能していなかった。 原因は ・@のDestoryはvoid func(){}が終了しないと実際にゲームオブジェクトは削除されていない。 ・AのInstantiateも@と同じくこの時点で完了していないようだった ・結果Bでの検索はAで生成されたものではなく@で削除予定だったものが参照されていた これで新しいアイテムは全部正しく初期化されてなかった。 ゲームオブジェクト名でアイテムを識別して GameObject.Findの検索に使ってるという不幸も重なってのバグ
|
- 【3Dゲームエンジン】Unity総合スレッド31 [無断転載禁止]©2ch.net
627 :名前は開発中のものです。[sage]:2017/12/14(木) 23:49:50.26 ID:On7lkIBu - 上の処理は
@→A→B の予定で動くはずなのに 実際には B→@→A みたいに動くわけよ 次からは気を付けるぞーっと
|