Unity
[Unity] 대화창을 만들어 object의 이름을 출력해보자
FiveReptile
2020. 5. 12. 21:38
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