반응형
✔ Unity - WorldToScreenPoint(Vector3 point)
3D Point에서 2D Point 가져오기
3D 캐릭터가 존재할때 캐릭터 위에 아이디나 특정 이미지, 버튼 등등을 위치 시킬 필요가 있다.
2D 오브젝트 타잎을 World Space으로 생성하고 위치 시키면 되기는 한다.
하지만 World로 생성할 시 화면 회전, 줌 인/아웃에 영향을 받아 카메라에 따라 다르게 보인다.
크기, 각도 등의 영향을 받지 않고 Text나 이미지를 캐릭터 위에 생성할때에는 World Space로 생성하지 않고 생성한뒤
Camera 속성인 WorldToScreenPoint 함수를 활용하면 된다.
WorldToScreenPoint( Vector3 point) 는 3D 포인트를 2D 포인트로 반환해주는 함수이다.
(물론 반대도 있다. ScreenToWorldPoint )
아래는 사용 예제를 나타낸다.
아래 스크립트를 Text에 붙이고 target 변수에 3D 오브젝트를 드래그하면 된다.
using UnityEngine;
public class PointLookAt : MonoBehaviour
{
//Text가 표시될 지점
public Transform target;
private Camera camera;
//타겟 지점으로부터 지정된 값 만큼 offset 시킬 변수
public float offsetX = 0;
public float offsetY = 0;
public float offsetZ = 0;
void Start()
{
camera = Camera.main;
}
void Update()
{
//2D 포인트 얻어오기
Vector3 screenPos = camera.WorldToScreenPoint(new Vector3(target.position.x + offsetX, target.position.y + offsetY, target.position.z + offsetZ));
transform.position = new Vector3(screenPos.x, screenPos.y, transform.position.z);
}
}
감사합니다.
반응형
'Programming > Unity' 카테고리의 다른 글
[Unity3D] Unity Remote 5 동작 되지 않는 문제 [해결법] (5) | 2020.12.31 |
---|---|
[Unity3D] Unity에서 Window OpenDialog 사용 (13) | 2020.12.23 |
[Unity3D] 카메라 거리에 따라 오브젝트 활성화/비활성화 (5) | 2020.12.04 |
[Unity] C# 외부 프로세스(프로그램) 조회 및 실행, 종료 - args 매개변수 전달 (2) | 2020.12.04 |
[Unity] WebSocket을 이용한 통신 서버 - 클라이언트 구축하기 (8) | 2020.12.03 |
댓글