반응형
레이캐스트(RayCast)
- 보이지 않는 관선을 쐈을 때 광선이 다른 콜라이더와 충돌하는지 검사하는 처리입니다.
이때 사용하는 광선을 레이(Ray) 라고 부르며 Ray 타입으로 레이의 정보만 따로 표현할 수도 있습니다.
레이캐스트(RayCast)를 실행했을 때 레이가 콜라이더를 가진 게임 오브젝트와 충돌하면 RaycastHit 타입으로 충돌 정보가 생성됩니다.
그 정보를 통해 레이와 충돌한
- 게임 오브젝트
- 충돌한 위치
- 충돌한 표면의 방향 등등,. 을 알 수 있습니다.
왼쪽 cube에는 레이캐스트에 반응하도록 interface 스크립트를 작성해 주었고 오른쪽 cube는 아무 코드도 없습니다.
왼쪽 cube로 Ray를 쏴 보겠습니다.
왼쪽 오브젝트에 Ray가 상호 작용을 하여 색깔도 바뀌고 자신이 누구인지 알려주는 로그도 띄웠습니다.
레이캐스트는 정말 많은 곳에서 다양하게 사용되고 있으니까 알아두면 좋은 기술입니다.
사용된 코드는 참고용으로 올려놓겠습니다.
Interface 코드 부여할 필요 없는 코드입니다. 상속을 주기위한 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public interface IObject
{
void Iam();
}
cube에 부여하는 스크립트입니다. IObject를 상속 받았기 때문에 반드시 iam() 함수를 작성해 주어야 합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Wall : MonoBehaviour,IObject
{
public void Iam()
{
Debug.Log("I am Wall");
}
}
빈 오브젝트에 부여하는 스크립트 설명은 위에서 하였으니 생략하겠습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayCastcode : MonoBehaviour
{
public float distance;
// Update is called once per frame
void Update()
{
Raycast_();
}
// 레이캐스트 함수
void Raycast_()
{
//레이캐스트 정보 저장 컨테이너
RaycastHit hit;
//마우스 위치
Vector3 point = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, -Camera.main.transform.position.z));
//z값을 빼줘야 Ray가 오브젝트에 적중한다.
Vector2 mouseP = new Vector2(point.x, point.y);
//위치 확인용 코드
/*if(Input.GetMouseButtonDown(0))
{
Debug.Log(mouseP.ToString());
}
*/
//레이캐스트
if (Physics.Raycast(transform.position, transform.forward,out hit, distance))
{
//충돌한 오브젝트로 부터 IObject컴포넌트 가져오기 시도
IObject obj = hit.transform.GetComponent<IObject>();
//가져오기 성공하면
if(obj != null&&Input.GetMouseButtonDown(0))
{
//함수 발동
obj.Iam();
//색깔 바꾸기
hit.transform.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
}
}
반응형
'Unity' 카테고리의 다른 글
[Unity] 인보크 - Invoke(); (0) | 2021.08.28 |
---|---|
[Unity] 난수 생성하기-Random.Range(); (0) | 2021.08.28 |
[Uinty3D] 마우스 클릭 좌표 구하기 (2) | 2021.06.25 |
[Unity] float사용에 유의점 (0) | 2021.05.15 |
[Unity] Rigidbody.velocity로 움직이기 (0) | 2021.03.25 |