유니티/실습

유니티 UI만들기

파란색까마귀 2022. 2. 13. 23:00

2016. 3. 29. 19:15

https://blog.naver.com/nagne2011/220668766890

 

먼저 UI 전용 카메라와

3D텍스트를 만들어서 메인카메라와 조금 떨어진 곳에 생성한다

 

 

 

 



참고로 3D텍스트는 뿌옇게 나오는데,  Font Size를 늘리고 Character Size를 줄이면 해결된다




 

그리고 카메라를 Depth only로 설정하고

Depth를 다른 카메라들(메인카메라는 0이다)과 다르게 설정해준다

이때, UI의 경우 화면의 가장 나중에 출력되야 되기 때문에 다른놈들보다 더 큰 값을 넣어줘서

우선순위를 마지막으로 하여야한다

(대략 100! 이런식으로..)

 

 

이것저것 설치해보면

Depth only된 UI 카메라에서 비추는게 아래 게임화면처럼 UI화 되어 비추어진다

 

 

이제 특정 오브젝트 위에 이름표를 붙여보자

 



 

위 스샷처럼 특정 오브젝트 위에 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
33
using UnityEngine;
using System.Collections;
 
public class UIfocus : MonoBehaviour {
 
    public Transform _target; //타겟
    public Camera _targetCamera;    //메인카메라
        
    public Camera myCamera;            //UI카메라
    private Vector3 _head = new Vector3 (0,2.0f,0);
    // Use this for initialization
    void Update () {
        Vector3 viewPos =
            this._targetCamera.WorldToViewportPoint(
                _target.position);
        //해당 위치값을 화면 위치값으로 가져온다
 
        Vector3 myWorld =
            this.myCamera.ViewportToWorldPoint (viewPos);
        //UI카메라에서 어디에서 찍히는지 확인
 
        // 방향
        Vector3 dirTo = myWorld - this.myCamera.transform.position;
 
        //이름 거리
        this.transform.position = this.myCamera.transform.position + dirTo.normalized * 20.0f;
 
 
    }
 
}
 
 
cs

 

 

요컨데, 3D위치 좌표를 가져와서 화면의 좌표로 변환하고,

그 좌표 위치에 3d텍스트를 띄우는 방식이다.



 

 

1
2
 
private Vector3 _head = new Vector3 (0,2.0f,0);
cs

 

 

1
2
3
4
5
 
Vector3 viewPos =
            this._targetCamera.WorldToViewportPoint(
                _head +_target.position);
        //해당 위치값을 화면 위치값으로 가져온다
cs

 

위와 같이 위치값을 화면위치값으로 가져올때 Y값을 추가하면 오브젝트 위치 + y값 만큼 주어진다

케릭터 머리위에 이름이 뜨게하기 위해선 필수적

 

 

728x90