kirakiray
@kirakiray

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

unityで他ゲームオブジェクトにアタッチされたスクリプトをそのままコピーして使いたい

解決したいこと

unity初心者です。大変初歩的な質問で申し訳ありませんが半日以上出来ず困り果てているのでご教授頂けると幸いです。よろしくお願い致します。
unityであるゲームオブジェクト(名前:ゲームオブジェクトA)にゲーム開始時からアタッチされて実行されているC#スクリプト(名前:Aスクリプト)をゲームプレイ中にコピーして使用したいです。C#スクリプト名を指定してアタッチする方法はインターネットで調べて出てきたのですが、中の値はもちろんリセットされてします。コピーしたあとゲームオブジェクトAのAスクリプトは削除し、いわばリレー方式で使用したいのです。

初歩的な質問で大変恐縮です。ご教授何卒お願い致します。

該当するソースコード

//Aとは違うゲームオブジェクト
        別ゲームオブジェクト.AddComponent<Aスクリプト>();
//ゲームオブジェクトA
        GameObject.Destroy(this.GetComponent<Aスクリプト>());
0

1Answer

いろいろやり方はあると思います。
例えば分かりやすい例としてデータ部分の実装とコンポーネントを分離するなどです。

データ部分

public class ScriptAData
{
    public int Hoge;
}

コンポーネント部分
試しにOnDestroy時に新しいゲームオブジェクトを作成してデータの引継ぎを行うような実装にしました。

public class ScriptA : MonoBehaviour 
{
    public ScriptAData data;

    private void Awake() 
    {
        if(this.data == null)
        {
            this.data = new Data();
        }
    }    

    private void OnDestroy() 
    {
        GameObject objectB = new GameObject();
        ScriptA objectBScriptA = objectB.AddComponent<ScriptA>();
        objectBScriptA.data = this.data;
    }
}
0Like

Your answer might help someone💌