본문 바로가기
유니티 공부/Unity

Unity - 물체와 닿았을 때 선택창 띄우는 법

by 코딩하는 돼징 2023. 7. 6.
반응형

1. 선택창 UI만들기


 

2.  선택창 기능 구현을 위한 스크립트 작성하기

[SerializeField]
TMP_Text promptText; // 선택창에서 표시될 내용
Action onYesSelected = null; // Yes를 선택했을 때 실행할 동작

01 텍스트 및 Yes 선택시 기능 설정

public void CreatePrompt(string message, Action onYesSelected)
{
    // onYesSelected 매개변수에 전달된 Action을 현재 객체의 OnYesSelected에 전달
    this.onYesSelected = onYesSelected;
    // promptText에 전달된 message값을 설정
    promptText.text = message;
}

02 Yes or No 버튼에 해당하는 기능 구현

public void Answer(bool yes)
{
    if (yes)
    {
        onYesSelected();
    }
	
    onYesSelected = null;
    gameObject.SetActive(false);
}

yes가 true가된 후 onYesSelected을 초기화 해줌으로써 동작이 한 번만 실행되도록 한다. 그리고 선택창을 비활성화 시킨다.


yes버튼 bool상태 확인

No버튼 bool 상태 확인


3. 충돌 시 선택창 활설화 및 Yes선택시 실행될 동작 설정

public void CollisionYesNoPrompt(string message, System.Action onYesCallback)
{
    yesNoPrompt.gameObject.SetActive(true);
    yesNoPrompt.CreatePrompt(message, onYesCallback);
}

4. cube와 상호작용시키기

 

01 cube에 Box Collider 설정


02 Cube의 색상을 변경하는 코드

[SerializeField]
private Renderer cubeRenderer;

private void ChangeCubeColor()
{
    Color newColor = Color.red; 
    cubeRenderer.material.color = newColor;
}

03 충돌이 발생시 호출되는 메서드

Player의 tag를 가진 GameObject가 Cube와 충돌 시 선택창을 띄우게 한다.

private void OnCollisionEnter(Collision collision)
{
    if (collision.collider.CompareTag("Player"))
    {
        uiManager.Instance.CollisionYesNoPrompt("Do you want to change the color?", ChangeCubeColor);
    }
}

message는 "Do you want to change the color?"로 설정하고 Yes선택시 Change Cube Color가 실행되도록한다.


5. 결과 영상

 

 

반응형

댓글