Transform 컴포넌트 위치에 Vector3(x좌표, y좌표, z좌표)를 입력하면 이동시킬 수 있다. Random 위치는 Random.Range(시작, 끝) Random한 값을 가져올 범위를 입력해주면 된다.
한동안은 블로그에 손도 못댔지만 방학도하고 친구가 게임을 만들자는 제안에 유니티를 공부하게되었습니다ㅎㅎ 어차피 객체지향언어도 하나 가지고 있었어야 했는데 잘된것같네요 C#으로 구현했고 앞으로도 그럴것같습니다ㅋㅋ 가장 처음에 구현한건 바로 이 스크립트를 가지고있는 오브젝트의 랜덤한 움직임입니다. <code> 다양한 방법이 있었지만 그중에 가장 직관적이고 코루틴이라는 함수를 사용해서 구현해봤습니다. 물리요소가들어가는 rigidbody를 지정해주고 랜덤으로 x축과 z축을 -1에서 1까지 float형으로 변수를 주고 2초간격으로 velocity를 써서 점프하듯이 움직입니다. 랜덤한 방향으로 점프하며 이동하는것을 보실수 있습니다. 앞으로 뭐가 만들어질지 기대가 됩니다. 글하나당
짤하나는 잊지않고 합니다 반응형 저작자표시비영리 '게임 개발 > Unity' 카테고리의 다른 글
unity에서 특정 범위 내에 랜덤한 위치에 오브젝트를 생성하는 방법을 알아보겠습니다.우선 unity에서 원하는 범위를 특정해봅시다. 저는 이 Plane 오브젝트 위에서 랜덤한 위치에 캡슐이 생성되었으면 좋겠네요 그러기 위해 우선 Plane에 자식 오브젝트인 RespawnRange를 추가하고 Plane의 크기와 얼추 비슷하게 콜라이더를 부여합시다. 위치가 Plane의 가운데에 오도록 position은 0, 0, 0 으로 하겠습니다 그리고 바로 코드를 짜보도록 합시다. 저는 원하는 값을 얻기 위해 RespawnRange의 포지션 값을 지닌 Vector3 변수를 만들고 콜라이더의 사이즈를 이용해 콜라이더 범위 내에서 랜덤한 위치를 가진 백터값을 구한 후 서로의 백터값을 더하도록 할 생각입니다. 말로 하면 어렵기만 하니 바로 코드를 짜보죠
우선 위 코드는 제가 설정한 콜라이더 범위 내에서 랜덤한 위치의 Vector3 값을 반환하는 함수를 만드는 코드입니다. 먼저 Plane의 자식인 RespawnRange를 GameObject변수인 rangeObject로 가져오고 콜라이더의 사이즈를 가져오기 위해 필요한 변수 rangeCollider를 Awake에서 할당합니다. 이제 함수 내부를 봅시다. 그 후 위에서 설정한 콜라이더의 사이즈를 가져온 후 좌표 방향에 맞게 그 후 위에서 구한 두 변수를 합한 respawnPosition 선언한 후 return합니다. 위에서 중요한 부분은 originPosition 변수는 생성 위치에 기준이 되는 값이고 랜덤하게 이동하는 값은 콜라이더의 사이즈를 기반으로 만든 RandomPostion 변수라는 부분입니다. 이제 위에서 만든 함수를 사용해 실제로 오브젝트를 소환합시다.
오브젝트를 1초마다 소환하도록 코루틴을 사용했습니다. 위 코드에서 중요한 부분은 Instantiate() 함수 사용 부분이겠죠 주목할 부분은 오브젝트를 소환할 위치 부분입니다. 저는 소환 위치에 위에서 제작한 함수 Return_RandomPosition() 넣어 제가 원하는 범위 내에서 랜덤한 위치에 오브젝트가 생성되도록 하였습니다. 이제 unity에서 실행해 봅시다. 물론 그 전에 Scirpt를 오브젝트에 할당해야겠죠? 저는 미리 만들어놓은 GameManager 오브젝트를 사용하겠습니다. 미리 만들어놓은 Capsule 프리펩과 ResapwRange를 알맞은 변수에 대입해주겠습니다. 자 이제 진짜로 실행을 해보겠습니다. 저희가 원하는 범위 내에서 캡슐이 소환됩니다. 그리고 이 코드의 특징이라 할 수 있는 부분은 Plane의 위치를 바꿔도 콜라이더 범위 내에서 캡슐이 생성된다는 점입니다. 위 2장의 사진 중 첫번째 사진을 보시면 Plane의 위치를 바꿔도 인스텍터 창의 position값은 부모인 Plane과 얼마나 차이가 나는지를 나타내는 localposition값이기 때문에 0, 0, 0으로 나오지만 더 이상 Plane의 자식이 아닌 2번째 사진에서는 값이 -6.98, 0, 1.53으로 값이 다르게 나오는 것을 볼 수 있습니다. 그리고 저는 코드를 짤 때 2번째 사진에 나오는 값인 transform.position을 기준으로 오브젝트의 생성 위치를 구했습니다. 그렇기 때문에 위에 사진에서 Plane의 위치를 바꿔도 콜라이더 내에서 캡슐이 생성되는 모습을 확인할 수 있습니다. 위의 내용이 여러분에게 조금이라도 도움이 되었기를 바라며 끝까지 봐주셔서 갑사합니다. 혹여 틀리거나 잘못된 내용이 있다면 과감히 지적해 주시기 바랍니다. |