본문 바로가기
개발/UNITY

Building System 만들기

by 개발자 구리 2022. 5. 3.

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