Snap Interactor컴포넌트에는 Data 필드가 존재합니다.
Data필드는 Object Type이므로 여러 종류의 Type을 등록할 수 있습니다.
저는 Scriptable Object를 활용해서 Snap될 시, 해당 Snap된 객체의 정보를 조금 더 추가적으로 제공하고자 합니다.
[CreateAssetMenu(menuName = "Snap/SnapInfo")]
public class SnapInfo : ScriptableObject
{
public int PanelId; // 스냅 자리 번호
public string Description; // 설명
}
위와 같이 객체에 추가할 정보들을 작성해줍니다.
Robot Chip을 특정 Snap Zone에 가져다 둘 시 Snap Interactable이 Chip의 (SnapInteractor Data) Snap Info을 파악해서, 그 Chip에 대응하는 Robot을 해당 Zone으로 호출하는 상황입니다.
public class Call : SnapInteractable
{
public Robot OneRobot;
public Robot TwoRobot;
public int Index;
protected override void InteractorAdded(SnapInteractor interactor)
{
base.InteractorAdded(interactor);
var interactorData = interactor.Data as SnapInfo;
if (interactorData.PanelId == 0)
{
OneRobot.SetCallDestination(Index);
}
else if (interactorData.PanelId == 1)
{
TwoRobot.SetCallDestination(Index);
}
}
}
Call이라는 스크립트는 Snap Interactable을 상속받은 후, InteractorAdded를 오버라이딩하여 사용합니다.
정리하면 다음과 같습니다.
Snap Interactor의 Data에는 여러가지 추가 정보를 저장할 수 있다.
Snap Interactble은 Snap Interactor와 상호작용시 Snap Interactor의 Data를 읽을 수 있다.