게임심화 - 10. Script - 레이캐스트

LSDrug·2024년 7월 4일

1. 레이캐스트(Raycast)

  • 물리적인 픽킹
  • 유저가 실제 게임화면을 보았을 때, 전체 오브젝트 중 특정 오브젝트를 선을 그어서 선에 닿은 오브젝트를 찾아내는 것.
  • 선(ray)을 그어 찾는 것(cast).
  • Physics(물리)에서 담당.
  • UI, 캐릭터 이동등, 모든 상황에 맞춰 사용할 수 있다.

특정 오브젝트를 찾기 위한 요소

  • 카메라 (Camera)
  • 레이 광선 (Ray)
  • 레이 캐스팅된 결과(Ray hit)

특정 레이어에만 레이캐스트를 하고자 하는 것은 레이어 마스킹

레이캐스팅(RayCasting)

  • 카메라를 통한 레이의 가장 일반적인 사용방법
  • Scene에 Raycast를 실행하는 것
  1. 레이캐스트는 가상의 "레이저 빔"을 원점에서부터 레이에 따라 씬 안의 콜라이더에 충돌할 때까지 보낸다.
    • 특정 오브젝트를 선택하기 위해서(Raycast)는 반드시 콜라이더가 존재해야 한다.
  2. 그 다음 오브젝트와 RaycastHit 오브젝트의 충돌된 점에 대한 정보를 반환한다.
  • 이것은 스크린상 나타난 이미지를 기반하여 오브젝트가 어디에 위치하는지 찾는 유용한 방법이다.

2. 예제

  • 1
public class ExampleScript : MonoBehaviour {
	public Camera camera;
    
    void Start() { // 한번만 호출
    	RaycastHit hit;
        Ray ray = camera.ScreenPointToRay(Input.mousePosition); // 마우스 위치
        
        if(Physics.Raycast(ray, out hit)) { // 콜라이더가 있을때 밑 부분 함수 실행
        	Transform objectHit = hit.transform;
            
            // Do something with the object that was hit by the raycast.
        }
   	}
}
  • 2
public class ExampleScript : MonoBehaviour {
	public bool zooming;
    public float zoomSpeed;
    public Camera camera;
    
    voic Update() {
    	if(zooming) {
        	Ray ray = camera.ScreenPointToRay(Input.mousePosition);
            float zoomDistance = zoomSpeed * Input.GetAxis("Vertical") * Time.deltaTime; // 줌 속도 * 상하(마우스, 키보드)의 이동 * 프레임 단위 고정
            
            camera.transform.Translate(ray.direction * zoomDistance, Space.World);
        }
    }
}
  • 3 : 특정 레이어(오브젝트)만 건들이는 방법 = 레이어 마스킹

  • 3.1 : 실제로 사용되는 코드 ==> 3번 수정된 코드


profile
마약같은 코딩, 마약같은 코딩러

0개의 댓글