unity初心者です。大変初歩的な質問で申し訳ありませんが半日以上出来ず困り果てているのでご教授頂けると幸いです。よろしくお願い致します。
unityであるゲームオブジェクト(名前:ゲームオブジェクトA)にゲーム開始時からアタッチされて実行されているC#スクリプト(名前:Aスクリプト)をゲームプレイ中にコピーして使用したいです。C#スクリプト名を指定してアタッチする方法はインターネットで調べて出てきたのですが、中の値はもちろんリセットされてします。コピーしたあとゲームオブジェクトAのAスクリプトは削除し、いわばリレー方式で使用したいのです。
初歩的な質問で大変恐縮です。ご教授何卒お願い致します。
c#
1//Aとは違うゲームオブジェクト 2 別ゲームオブジェクト.AddComponent<Aスクリプト>(); 3//ゲームオブジェクトA 4 GameObject.Destroy(this.GetComponent<Aスクリプト>());
質問ですが、
①このAスクリプトは常に一つが生きているのでしょうか?
それとも、
②常におおもとが存在して、それを元に複製したスクリプトが展開されるのでしょうか?
※②の場合は、おおもとのデータは変化せず、複製したスクリプトはそれぞれ変化するもおおもとには反映されないため、おおもとから複製したものは常に同じ値で、複製からさらに複製があれば途中で変化した値も引き継ぐ
①の場合でしたらstaticもしくはシングルトンを使用するというのが定番かとは思います
②の場合はあまり想定されない為、お約束のやり方というのはなさそうですので、自力で考えて実装する必要があると思います
×ご教授
〇ご教示
len_souko様
コメントありがとうございます。更にご教示まで訂正して頂きまして誠にありがとうございます。教えて頂かなかったらこれから先もずっと間違えて書くところでした。ありがとうございます。
頂いた質問ですが、1になります。たしかにstaticやシングルトンでこまめに行えば確実ですね。最悪の場合はそうさせて頂きます。
最悪と言うより、最良のような気がしますが>>シングルトン
ただ、何かしらの目的があってシングルトン以外の手段で行いたいというのであれば・・・
処で、Aスクリプトは固定のクラスが対象でしょうか?それとも汎用的に対応したいのでしょうか?
固定であるのならば、引数でAスクリプトのインスタンス(引継ぎデータ元オブジェクト)を受け取り、内部で値の複製を行うメソッドを用意すれば如何でしょうか?
直感ですが、リフレクションを使った場合だとMonoBehaviourが噛んでいるのでフィールドコピーだとgameObjectなんかもコピーしようとして親GameObjectがすげ変わった後に親GameObjectが破棄されてしまうのでは?とか思ってるんですが
len_souko様
ありがとうございます。初心者なので楽をしようとしましたが、ご助言通り楽をせず一つ一つ処理をしていきたいと思います。
Aスクリプトは汎用的にしたく存じます。おっしゃるとおり、親GameObjが破棄されてしまうのは阻止したく、試行錯誤しております。

回答1件
あなたの回答
tips
プレビュー