Use CustomType
커스텀 타입을 추가하는 방법에 대해서 설명합니다.
UGS에서는 간단하게 IType 인터페이스를 상속받아 사용자 정의 클래스나 구조체를 시트 내에서 사용할 수 있습니다. 예를 한번 들어볼까요?
우리에게 위와같은 테이블이 있다면 Vector3 값을 어떻게 입력해야할까요? 그건 우리가 마음대로 정하면 됩니다! 한번 구현해볼까요? 아, 먼저 구현에 앞서 우리가 사용중인 Float 타입은 어떻게 구현되어 있는지 참고 해봅시다. 핵심이 되는 Read, Write 함수를 잘 확인해보세요!
1
namespace Hamster.ZG.Type
2
{
3
[Type(typeof(float), new string[] { "float", "Float" })]
4
public class FloatType : IType
5
{
6
public object DefaultValue => 0.0f;
7
/// <summary>
8
/// value recevied from google sheet.
9
/// </summary>
10
public object Read(string value)
11
{
12
float f = 0.0f;
13
var b = float.TryParse(value, out f);
14
if (b == false)
15
{
16
return DefaultValue;
17
}
18
return f;
19
}
20
21
/// <summary>
22
/// value write to google sheet
23
/// </summary>
24
public string Write(object value)
25
{
26
return value.ToString();
27
}
28
}
29
}
30
Copied!
Read 함수는 구글 시트에서 받은 데이터를 파싱해서 데이터로 만든다는걸 알 수 있습니다. Write 함수는 구글 시트에 데이터를 다시 써넣는 함수라는것을 알 수 있습니다.
그러면 이제, Vector3 을 지원하기 위한 코드를 작성해볼까요? ( UGS에서는 이미 Vector3을 지원합니다)
1
using UnityEngine;
2
namespace Hamster.ZG.Type
3
{
4
[Type(typeof(Vector3), new string[] { "vector3", "Vector3", "vec3" })]
5
public class Vector3Type : IType
6
{
7
public object DefaultValue => Vector3.zero;
8
/// <summary>
9
/// value recevied from google sheet.
10
/// </summary>
11
public object Read(string value)
12
{
13
// value form : [1,2,3]
14
var values = ReadUtil.GetBracketValueToArray(value);
15
float x = float.Parse(values[0]);
16
float y = float.Parse(values[1]);
17
float z = float.Parse(values[2]);
18
return new Vector3(x,y,z);
19
}
20
21
/// <summary>
22
/// value write to google sheet
23
/// </summary>
24
public string Write(object value)
25
{
26
Vector3 v = (Vector3)value;
27
return quot;[{v.x},{v.y},{v.z}]";
28
}
29
}
30
}
31
Copied!
작성을하고 파일을 저하면 UGS가 알아서 해당 타입을 인식합니다. 한번 잘 인식이 되는지 아래처럼 시트에 데이터를 작성해봅시다.
이후, 데이터를 불러와봅시다.
1
2
using UnityEngine;
3
4
public class test : MonoBehaviour
5
{
6
void Start()
7
{
8
Cube.Data.Load();
9
foreach(var data in Cube.Data.DataList)
10
{
11
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
12
cube.transform.position = data.position;
13
}
14
}
15
}
16
Copied!
결과입니
Copy link