umetaro36
@umetaro36 (ume)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

エディタ拡張から生成するPrefabそれぞれにstringを付与する

それぞれのPrefabにstringを付与したい

エディタ拡張である決まったPrefabを簡単に出現させます。
それぞれにstringデータを付与したいのですがどうやったら良いかわかりません。(それぞれ生成したObjectのInspectorに記録されてほしい)
Prefabを作成するごとにstringを手動で打ち込み、Createでそれが生成される仕組みにしたいです。スクリーンショット 2021-07-07 9.31.26.png
教えてください。
(付与したいstringは location と discription です。)

また、Createを押したらこのWindowが閉じるコードもできたら教えていただきたいです。

現在のコード

using UnityEngine;
using UnityEditor;
using System.Collections;

public class CreateBuoys : EditorWindow
    
{
    
    private GameObject cubePrefab;
    string location;
    string discription;

    [MenuItem("Editor/PrefabSet")]      
    static void Init()
    {
        EditorWindow.GetWindow<CreateBuoys>(true);
    }

    void OnEnable()
    {

    }

    void OnSelectionChange()
    {

    }

    void OnGUI()
    {
        try
        {
            
            location = EditorGUILayout.TextField("Location", location);
            discription = EditorGUILayout.TextField("Discription", discription);

            GUILayout.Label("", EditorStyles.boldLabel);
            if (GUILayout.Button("Create"))
                Place();
        }
        catch (System.FormatException) { }
    }

    static void Place()
    {
        GameObject cubePrefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Cube.prefab");

        GameObject p = PrefabUtility.InstantiatePrefab(cubePrefab) as GameObject;
        p.transform.position = new Vector3(0, 0, 0);
    }
}
0

1Answer

Prefabから生成したインスタンスに個別の値を持たせたいものと受け取ります。
その場合、質問に添えられたコードは関係しません。

PrefabのGameObjectにアタッチされている「MonoBehaviourを継承したクラス」に、publicまたは[SerializeField]なメンバーを持たせることで、インスペクタからアクセス可能になります。

例えば、以下のスクリプトをPrefabにアタッチしておいて、そのPrefabのインスタンスを生成すると、インスペクタでそれらのメンバーにアクセスできるようになります。

SerializeFieldTest.cs
using UnityEngine;

public class SerializeFieldTest : MonoBehaviour {
	public string location = default;
	public string discription = default;
}
0Like

Your answer might help someone💌