본문 바로가기

Unity

[Unity] 대화창을 만들어 object의 이름을 출력해보자

728x90

기본적인 대화창을 만들기에 앞서 object의 이름을 출력하는 대화창을 만들어보겠다.

 

 

Hierarchy뷰는 대화창의 디자인 inspector창은 CancelButton의 OnClick 리스너 설정이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class GameManager : MonoBehaviour
{
    public GameObject TalkImage;
    public GameObject scanObject;
 
    public void ShowText(GameObject scanObj)
    {
        Text TalkText = TalkImage.transform.Find("TalkText").GetComponent<Text>();
 
        scanObject = scanObj;
        TalkText.text = "안녕 내 이름은 " + scanObject.name + "이야.";
 
        TalkImage.SetActive(true);
    }
}

 

우선 UI를 관리해줄 GameManager 스크립트를 만들어준다. 

 

  • TalkImage - 대화창 UI를 저장할 변수이다.
  • scanObject - 플레이어가 찾은 오브젝트를 전달받을 변수이다.

TalkImage에 자식으로 있는 TalkText를 가져와서 그곳에 scanObject의 이름을 text로 설정해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Player : MonoBehaviour
{
    public GameManager manager;
 
    void Update()
    {
        if (Input.GetButtonDown("Jump"&& scanObj != null)
        {
            Debug.Log(scanObj);
            manager.ShowText(scanObj);
        }
    }
 
    void FixedUpdate()
    {
        Debug.DrawRay(rigid.position, playerDir * 1.0f, Color.red);
        RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, playerDir, 1.0f, LayerMask.GetMask("Object"));
 
        if (rayHit.collider != null)
        {
            scanObj = rayHit.collider.gameObject;
        }
        else
        {
            scanObj = null;
        }
    }
 

 

Raycast 설정은 플레이어의 방향에서 playerDir 방향으로 1.0f만큼의 길이를 가진 ray를 만들어준다. 만약 ray에 식별된 오브젝트의 레이어가 Object이라면 rayHit에 저장해준다.

 

만약 식별할 오브젝트에 콜라이더가 설정되어있지 않다면 대화창이 작동하지 않을 것이다.

 

결과 화면

728x90