Raycast 개요
Unity의 Raycast는 광선을 발사하여 오브젝트가 적중하면 bool값을 true로 반환하는 Physics 함수다.
그런 뒤 거리, 맞은 물체의 여러가지 정보들을 RaycastHit타입의 변수에 저장하여 사용하거나, 물체를 변화시킬 수 있다.
physics.Raycast의 매개변수
Vector3 origin : 광선 발사 지점
Vector3 direction : 발사하는 방향
Ray ray : origin과 direction이 합쳐진 형태, 광선
RaycastHit hit : 충돌체와 충돌체의 정보를 가지고있는 변수
float distance : 광선의 길이, 없으면 무한대 발사
int layerMask : 레이어로 지정되어 특정 오브젝트만 충돌하게 만든다.
int layerMask = 1 << 6 // 6번 레이어만 감지
int layerMask = ~(1 << 6) // 6번 레이어만 무시한다.
int layerMask = 1 << LayerMask.NameToLayer("Player") // player라는 이름의 레이어만 충돌체크함
int layerMask = (1 << 6 | 1 << 7) // 6번 레이어, 7번 레이어 감지
// 유형1
physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit hitInfo, float distance, int LayerMask);
// 유형2
Ray myRay = new Ray(Vector3 origin, Vector3 direction);
physics.Raycast(myRay, RaycastHit hitInfo, float distance, int LayerMask);
Raycast 예제
마우스로 클릭을 하면 큐브의 색깔이 바뀌는 간단한 예제다.
ScreenPointToRay로 스크린상에서 마우스로 클릭한 위치를 바탕으로 광선으로 만들어서 Ray타입의 변수를 만든다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayCastTest : MonoBehaviour
{
void Update()
{
updateInput();
}
private void updateInput()
{
if (Input.GetMouseButtonDown(0))
{
raycasting();
}
}
void raycasting()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
float distance = 100f;
int layerMask = ~(1 << 6);
Debug.DrawRay(ray.origin, ray.direction * 20f, Color.red);
if (Physics.Raycast(ray, out hit, distance, layerMask))
{
Debug.Log(hit.transform.gameObject);
MeshRenderer meshRenderer = hit.transform.gameObject.GetComponent<MeshRenderer>();
if (meshRenderer.material.color == Color.white)
{
meshRenderer.material.color = Color.red;
}
else if (meshRenderer.material.color == Color.red)
{
meshRenderer.material.color = Color.green;
}
else if (meshRenderer.material.color == Color.green)
{
meshRenderer.material.color = Color.blue;
}
else if (meshRenderer.material.color == Color.blue)
{
meshRenderer.material.color = Color.white;
}
}
}
}
반응형
'Programming > C# | Unity' 카테고리의 다른 글
[그래픽스] 렌더링 파이프라인 (0) | 2022.09.08 |
---|---|
[Unity] 1인칭 마우스 입력 / 카메라 회전 & Zoom 기능 구현하기. (0) | 2022.08.15 |
[Unity] 상속 & 인터페이스 총 정리 (0) | 2022.08.14 |
[Unity] 델리게이트(Dlegate) & 이벤트(Event) 쉽게 접근하기. (1) | 2022.08.13 |
[Unity] 이벤트 함수 정리 (1) | 2022.07.07 |