1.Class 내부 변수 이름으로 호출하기

 

Unity에서 대화상자를 구현하고 있는데 Excel을 이용하여 외부데이터를 불러와서 읽어오는 방식을 택했

다.

 

해당 Asset을 사용하여 Excel를 읽었다.

https://github.com/mikito/unity-excel-importer

 

GitHub - mikito/unity-excel-importer

Contribute to mikito/unity-excel-importer development by creating an account on GitHub.

github.com

 

DialogDB.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using UnityEngine;

[ExcelAsset]
public class DialogDB : ScriptableObject
{
	public List<DialogDBEntity> Stage1; // Replace 'EntityType' to an actual type that is serializable.
	public List<DialogDBEntity> Stage2; // Replace 'EntityType' to an actual type that is serializable.
	
    //외부에서 내부 변수를 이름으로 호출 할 수있는 함수
	public object PrintField(string name)
    {
    	// public변수가 아니면 GetField에서 null이 리턴된다
        var result = this.GetType().GetField(name).GetValue(this); 

        return result;
    }
}

 

DialogeSystem.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;

public class DialogeSystem : MonoBehaviour
{
    [SerializeField] DialogDB dialogDB;

    List<DialogDBEntity> curStageDialoge;

    private void Start()
    {		
        //해당 오브젝트가 활성화시 Stage1의 DialogDB를 호출한다.
        DialogLoad("Stage1");
    }

    public void DialogLoad(string StageName)
    {
    	//매개변수의 StageName을 받아서 dialgoDB Class의 변수를 이름으로 호출한다.
        object curStage = dialogDB.PrintField(StageName);
        //object 자료형으로 호출하였기에 언박싱을 하여 원래의 자료형으로 돌려줘야한다.
        curStageDialoge = (List<DialogDBEntity>)curStage;
    }

}

 

DialogeSystem 에서 DialogeDB의 PrintField() 메서드를 통해서 해당 클래스의 변수를 박싱( List<DialogDBEntity  ->var)해서 받아오고, 받아온 변수를 언박싱(object -> List<DialogDBEntity>)하여 내가 쓸수있게 만들어준다. 

 

+ Recent posts