1.Class 내부 변수 이름으로 호출하기
Unity에서 대화상자를 구현하고 있는데 Excel을 이용하여 외부데이터를 불러와서 읽어오는 방식을 택했
다.
해당 Asset을 사용하여 Excel를 읽었다.
https://github.com/mikito/unity-excel-importer
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>)하여 내가 쓸수있게 만들어준다.
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-09-12(목) :: 삼각함수로 방향벡터 설정하기 (0) | 2024.09.12 |
---|---|
TIL : 2024-09-11(수) :: Unity에서 구조체 변수를 초기화하는법 (0) | 2024.09.11 |
TIL : 2024-09-09(월) :: GitHub 기초 (0) | 2024.09.09 |
TIL : 2024-09-07(토) (0) | 2024.09.07 |
TIL : 2024-09-06(금) (0) | 2024.09.06 |