Physics.Raycast
Raycast는 광선을 쏘는 것을 의미한다. X-ray 할때 그 ray.
Raycast를 사용하면 광선을 쏴서 충돌되는 Collider에 대한 거리, 위치 등의 정보를 RaycastHit라는 구조체로 반환한다.
주로 전방에 있는 오브젝트를 검출할 때 사용하며, '충돌'되는 Collider를 반환하므로, Collider가 없는 오브젝트는 감지할 수 없다.
Camera.ScreenPointToRay
카메라에서 마우스가 입력된 곳을 향해 Ray를 쏜다.
public class PreviewObject : MonoBehaviour
{
void Update()
{
Vector3 mouse = Input.mousePosition;
Ray casepoint = Camera.main.ScreenPointToRay(mouse);
RaycastHit hit;
if (Physics.Raycast(casepoint, out hit, Mathf.Infinity))
{
transform.position = new Vector3(hit.point.x, hit.point.y + transform.localScale.y / 2, hit.point.z);
}
if (Input.GetKeyDown(KeyCode.R))
{
transform.Rotate(0, 90, 0);
}
}
}
위 스크립트를 wall에 component로 추가하자. 마우스 위치에 따라서 position이 변경되는 것을 볼 수 있다.
Input.GetKey(KeyCode.~)
public class CameraMove : MonoBehaviour
{
public float rotate_speed = 0.1f;
void Update()
{
if (Input.GetKey(KeyCode.A))
{
transform.Rotate(0, rotate_speed, 0);
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(0, -rotate_speed, 0);
}
}
}
위 스크립트를 Main Camera에 component로 추가하자. A, D를 누르면 카메라가 회전하며 오브젝트를 비추는 것을 볼 수 있다.
Input.GetMouseButtonDown
0은 마우스 왼쪽버튼 클릭, 1은 마우스 오른쪽버튼 클릭, 2는 마우스 휠 클릭을 의미한다.
왼쪽버튼을 클릭할때마다 Instantiate를 호출해서, preview_wall의 위치와 각도에 wall을 추가해주는 코드이다.
public class Build : MonoBehaviour
{
public GameObject wall;
public GameObject preview_wall;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0)) // left click
{
GameObject object_clone = Instantiate(wall, preview_wall.transform.position, preview_wall.transform.rotation);
}
}
}
해당 component는 Camera Center에 추가해주자.
여기까지 해보고나니 해덕으로서 미니 프로젝트로 도전해보고 싶은게 떠올랐다.
1. 기숙사 선택(그리핀도르, 래번클로, 후플푸프, 슬리데린) - 메뉴에서 가구 고르기(선택한 기숙사에 맞는 가구) - 배치하기
2. 방향키로 인물을 움직일 수 있고, 특정 키를 누르면 가구와 상호 작용하기
ex. 루모스 : 조명이 켜짐. 녹스 : 조명이 꺼짐. 윙가르디움 레비오사 : 가구가 공중으로.. 아씨오 : 가구가 가까이 옴. 알로호모라 : 문이 열림. 이 정도? 벌써 재밌다.
욕심 내지말고 요기까지만 해보기.
'개발 > UNITY' 카테고리의 다른 글
이미지 파일을 게임 오브젝트로 (0) | 2022.06.06 |
---|---|
버튼 클릭이 안되는 경우 (0) | 2022.05.20 |
Unity 3D Basic - 1 (0) | 2022.04.26 |
Unity 2D Basic - 2 (0) | 2022.04.20 |
Unity 2D Basic - 1 (0) | 2022.04.18 |