Preview를 우클릭 했을 때, 취소하는 코드를 추가했다.

private void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        Build();
    }
    if (Input.GetButtonDown("Fire2"))
    {
        Cancle();
    }
}

private void Build()
{
    if (isPreviewActivated)
    {
        if (isPreviewActivated)
        {
            Debug.Log("Create");
            Instantiate(varBuildCraft, varPreviewCraft.transform.position, Quaternion.identity);
            Destroy(varPreviewCraft);
            isPreviewActivated = false;
            craftingWindow.SetActive(false);
            varPreviewCraft = null;
            varBuildCraft = null;
            PlayerController.instance.ToggleCursor(false);
        }
    }

}

private void Cancle()
{
    if (isPreviewActivated)
    {
        Destroy(varPreviewCraft);
    }
    isPreviewActivated = false;
    varPreviewCraft = null;
    varBuildCraft = null;

}

 

그리고 구조물을 클릭 했을 때 정보를 불러오며, 제작을 눌렀을 때 해당 버튼의 구조물을 불러온다.

public class CraftTab
{
    public CraftData craft;
}

public class CraftingTable : MonoBehaviour
{
    public GameObject craftingWindow;

    private PlayerController controller;

    [Header("Events")]
    public UnityEvent onOpenCraftingWindow;
    public UnityEvent onCloseCraftingWindow;

    public static CraftingTable instance;

    private void Awake()
    {
        instance = this;
        controller = GetComponent<PlayerController>();
    }

    private void Start()
    {
        
        craftingWindow = GameManager.Instance._UI.transform.Find("Crafting/CraftingCanvas").gameObject;
        craftingWindow.SetActive(false);
    }

    public void OnCraftingTableButton(InputAction.CallbackContext callbackContext)
    {
        if (callbackContext.phase == InputActionPhase.Started)
        {
            Toggle();
        }
    }

    public void Toggle()
    {
        if (craftingWindow.activeInHierarchy)
        {
            craftingWindow.SetActive(false);
            controller.ToggleCursor(false);
            onCloseCraftingWindow?.Invoke();
        }
        else
        {
            craftingWindow.SetActive(true);
            controller.ToggleCursor(true);
            onOpenCraftingWindow?.Invoke();
        }
    }

    public bool IsOpen()
    {
        return craftingWindow.activeInHierarchy;
    }
}
public class CraftTabUI : MonoBehaviour
{
    public Button button;
    public Image icon;
    private Outline outline;
    private CraftTab curTab;
    public int thisIcon;
    [SerializeField]private CraftBuild craftBuild;
    public TMP_Text selectedcraftname;
    public TMP_Text selectedcraftdescription;
    public TMP_Text selectedcraftingrediants;

    public bool equipped;

    public GameObject craftInforPanel;

    private void Awake()
    {
        outline = GetComponent<Outline>();
    }

    private void Start()
    {
        craftInforPanel.SetActive(false);
    }

    private void OnEnable()
    {
        outline.enabled = equipped;
    }

    public void Set(CraftTab tab)
    {
        curTab = tab;
        icon.gameObject.SetActive(true);
        icon.sprite = tab.craft.icon;

        if (outline != null)
        {
            outline.enabled = equipped;
        }
    }

    public void Clear()
    {
        curTab = null;
        icon.gameObject.SetActive(false);
    }

    public void OnButtonClick()
    {
        if (craftInforPanel.activeInHierarchy)
        {
            craftInforPanel.SetActive(false);
        }
        else
        {
            craftInforPanel.SetActive(true);
        }

        craftBuild.craftNum = thisIcon;
        selectedcraftname.text = craftBuild.crafts[thisIcon].craft.craftName;
        selectedcraftdescription.text = craftBuild.crafts[thisIcon].craft.description;
        selectedcraftingrediants.text = craftBuild.crafts[thisIcon].craft.ingrediants;

    }
}

 

 

유니티에서 연결이 헷갈리고 구조물과 상호작용을 구현하지 못해서 아쉽다. 다들 똑같은 시간에 개발했기 때문에 시간이 부족하다는건 핑계이고 코드 설계하는데 시간이 오래 걸리는걸 보면 공부량이 부족한게 맞다. 연휴에 강의 좀 재수강해야겠다.

+ Recent posts