반응형
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. 결과 영상
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - raycast할때 tag가 잘 인식되지 않는 경우 (0) | 2023.07.09 |
---|---|
Unity - 3D GameObject를 버튼 처럼 사용하기 (0) | 2023.07.07 |
Unity - Scene전환 후 Player가 직진만 하고 좌우, 회전 이동 안하는 오류 해결 방법(Quaternion.Slerp) (0) | 2023.07.06 |
Unity - RangeAttribute을 사용해서 범위 지정하기 (0) | 2023.07.04 |
Unity - Grid Layout Group (0) | 2023.06.21 |
댓글