유니티 공 날리기 - yuniti gong nalligi

반응형

Rigidbody rigidbody; rigidbody.AddForce(dir, ForceMode.Impulse); // dir : 날리고싶은 방향

AddForce를 이용하여 원하는 방향으로 힘을 줘서 날릴수 있다. 

이때 회전하면서 날리고 싶으면

rigidbody.AddTorque(power, ForceMode.Impulse);

AddTorque를 사용하면 된다. 

날렸을때 drag값을 지정해주지 않으면 무한대로 날아가게 되는데, drag값이 저항 값이기 때문에 값을 추가해주면 날아가면서 저항에 의해 멈추게 된다. 회전은 angularDrag 값을 이용해 저항을 조절할 수 있다. (이 두 값은 인스펙터에서 수정할수 있다.)

반응형

'Unity' 카테고리의 다른 글

svn Inconsistent line ending style 에러  (0) [Unity] AnchorPreset 스크립트로 변경하기  (0) [Unity] Vector회전  (0) [Unity] 아이폰 기기 푸시 권한 확인하기  (0) [Unity] 로컬푸시 이모지  (0)
2021.11.24
2021.10.01
2021.09.26
2021.09.01
2021.08.14

총알에 해당하는 오브젝트를 만들고 스크립트를 짠뒤, Hierarchy 에서 Project에 아무위치에나 옮겨놓는다.

그럼 파란색 네모 모양으로 바뀐다.

보스에 해당하는 캐릭터가 저걸 복사해서 쓰면 된다.

저기서 left방향으로 가는 이유는 Vector2에서 앞으로 가는 함수가 뭔지 몰라서 left 라고 했다.

'유니티 > 탄막게임' 카테고리의 다른 글

OntriggerEnter2D를 이용해서 충돌 판정하기  (0) 화면 밖으로 나간 오브젝트 삭제  (0) 유니티 복사를 이용한 총알 발사  (0) 씬 바꾸기  (0) 공 드래그 해서 움직이기  (0)
2020.01.30
2020.01.30
2020.01.30
2020.01.30
2020.01.30

유니티 공굴리기(Roll-a-Ball) #2

BQRIUM2016. 6. 15. 9:57

1편 포스팅을 그대로 이어가기 때문에 1편 프로젝트가 있어야 합니다.

게임을 실행한 모습입니다.

바닥이 평면이기 때문에 공이 안 움직이는 것 같지만,
사실 공의 상태는 물리법칙이 전혀 적용되어 있지 않았습니다.

정말 그런지 궁금하면 바닥을 기울여보세요.
공이 굴러떨어지면 물리법칙이 적용되어 있다는 것이니까요.

공에 물리법칙을 적용시켜 보겠습니다.

인스펙터 부분을 보면 어디에도 물리법칙에 관한 내용은 없습니다.
그러면 Add Component를 누르세요.

가장 위에 있는 리지드바디를 누르세요.
그러면 인스펙터뷰에 새로운 탭이 만들어질겁니다.

리지드바디가 추가되었는데요, 저기 잘 보면 중력을 사용한다 되어 있습니다.
물리가 적용되었는지 궁금하면 바닥을 기울이고 게임을 실행시켜보세요.

20 정도 x 값을 기울였더니 공이 굴러떨어집니다.
공이 굴러떨어지지 않도록 벽을 막아놔야겠군요.

큐브를 만들었는데 로테이션값을 건드려선지 마름모가 되었네요.

벽을 만들어야 하니 큐브를 만든 후 스케일 z를 20으로 설정해보세요.
(바닥의 크기가 20*20입니다.)

이제 이 오브젝트를 똑같이 4개를 만들어야 할 텐데,
같은 성질을 가지는 오브젝트들은 프리팹으로 만드는 것이 더 효율적입니다.

프리팹을 만들려면 아래 프로젝트 부분에 드래그 앤 드롭하면 됩니다.

프리팹이 만들어졌군요. 그런데 매터리얼도 저기에 있고, 프리팹도 저기에 있네요.
지금은 적어서 상관없지만 엄청나게 많아지면 정리가 필요할 겁니다.

프로젝트 부분은 파일로 존재하는 것입니다. 즉, 매터리얼도 그렇고 프리팹도 그렇고
프로젝트 파일에 저장된다는 것이죠. 따라서 폴더를 저곳에도 만들 수 있습니다.

material을 만들듯이 폴더도 만들어봅시다.
(만드는 방법은 같습니다.)

매터리얼은 매터리얼 폴더에 넣고, 프리팹은 프리팹 폴더 만들어서 거기에 넣으면 됩니다.
이름을 바꾸고 싶으면 F2를 누르면 바꿀 수 있습니다. 이제 프리팹을 사용해봅시다.

프로젝트 부분에서 프리팹을 클릭하고 드래그 앤 드롭하면 씬에 배치됩니다.
마우스로 옮기거나 좌표를 설정하여 바닥에 배치해봅시다.

하이라키 부분을 보면 wall 오브젝트가 하나 더 생겨 있습니다.

그런데 저 부분도 역시 정리했으면 좋겠네요.
폴더 같은 게 있었으면 좋겠습니다. 그러면 형태가 없는 오브젝트를 만들면 됩니다.

먼저 빈 오브젝트를 만드세요. 말 그대로 형체가 없는 오브젝트입니다.
아무런 내용이 담겨 있지 않는 상태이니 그냥 폴더로도 쓸 수 있습니다.

처음 만들어진 이름은 게임 오브젝트인데요, 이름은 바꾸면 됩니다.
그리고 오브젝트 복사하는 방법은 Ctrl + D를 하세요.

벽을 다 만들고 정리까지 해놓았습니다.
이제 공이 움직일 수 있도록 만들어봅시다.

컴포넌트에서 스크립트를 하나 추가합시다.
(리지드바디를 만들듯이 같은방법으로 만들면 됩니다.)

스크립트 이름은 볼 컨트롤러고, 씨샵으로 코딩합니다.

스크립트를 짜봅시다.
스크립트를 짜려면 저 부분에서 연한 회색으로 되어 있는 BallController을 더블클릭하거나,

프로젝트 파일에서 최상위에 생성된 스크립트를 더블클릭하면 됩니다.

저 스크립트도 폴더 만들어서 정리해놓읍시다.

그리고 코드를 실행하시면,
비주얼 스튜디오 같은 컴파일러와 연결이 됩니다.

저같은 경우는 비주얼 스튜디오가 알아서 켜지는군요.

이제 저 부분에 코드를 짜서 볼을 움직여 봅시다.

볼 컨트롤러 스크립트에 위의 코드를 입력하시면 됩니다.

먼저 가장 위에 리지드바디를 선언했습니다.
그리고 스타트 함수에서 컴포넌트의 리지드바디를 불러옵니다.

update 함수 안에 3차원 벡터를 선언했습니다

그 아랫부분은 키보드 입력을 확인하는 부분이고,
해당 키보드가 눌리면 그만큼 좌표가 바뀝니다.

다 완료했으면 비주얼스튜디오를 저장하고, 유니티로 와서 게임을 실행시켜 봅시다.
그러면 공이 움직이는 것을 볼 수 있습니다. 위 코드대로라면 방향키로 움직일 수 있을 겁니다.

하지만 카메라의 시야 밖을 나갈 수도 있군요.
카메라가 공을 따라다니면 좋을 것 같습니다.

하이라키에 카메라 컨트롤러를 만듭시다.
(빈 오브젝트입니다.)

스크립트를 만들어야 하니, 애드컴포넌트 눌러
"CameraController"라는 새로운 스크립트를 만들고 실행시킵시다.


먼저 두 개의 오브젝트를 만듭시다. 일단 저거만 쓴 다음에,
유니티로 다시 돌아와 보세요. 스크립트 저장도 하고요.

다시 돌아와서 카메라 컨트롤러(스크립트가 적용된 오브젝트)를 보면,
위 이미지처럼 타겟 카메라와 타겟 오브젝트를 설정할 수 있도록 바뀝니다.
타겟 카메라는 메인 카메라를 드래그 앤 드롭하고, 오브젝트는 공으로 합시다.

설정된 모습. 지금은 스크립트를 다 짜지 않았기 때문에
카메라가 따라다니지는 않습니다. 지금부터 스크립트를 짜야죠.

참고로 private으로 선언된 offset은 유니티에서 접근할 수 없습니다.
그리고 타겟과 카메라의 위치에 쓰인 transform.position은 인스펙터에 있는 트랜스폼 탭의 포지션 맞습니다.
그거 코드로 옮긴 거니까요. 이제 유니티로 돌아가서 카메라가 잘 따라다니는지 확인해봅시다.

카메라가 제대로 따라다니는 것 같군요.
이제 아이템만 구현하면 될 것 같습니다.

아이템의 색은 노란색으로 했습니다. (0.5크기의 정육면체입니다.)
마음대로 설정하시면 되고, 밋밋하니까 애니메이션도 만들어보겠습니다.

일단 아이템의 인스펙터뷰에서 컴포넌트를 추가합시다.

저거 눌러서 컴포넌트를 추가합니다.
단축키 컨트롤+6을 하면 애니메이션이 나옵니다.


애니메이션을 생성할 수 있는 팝업인데요,
저기에 크리에이트를 눌러서 추가할 수 있습니다.

어디에 만들 건지 나오는데 프로젝트 파일에 저장하는 게 좋겠죠.
프로젝트 파일에 지금까지 만들었던 파일들이 보이는군요.

애니메이션도 애니메이션 폴더를 만들어서 넣는 게 좋겠습니다.

이제 애니메이션을 만들어 볼 건데요, 우측에 눈금들의 작은 단위 0.01초입니다. (작은 단위)
그리고 큰 단위는 0.05초군요. 굵은 눈금 20개가 1초인 겁니다.
애니메이션을 만들기 위해 Add Property를 누르세요.

아이템을 회전 시키는 애니메이션을 만들 거니까,
아이템의 로테이션 값을 수정시키면 되겠죠. 매 프레임마다 증가시킵시다.

옆에 +모양을 클릭하면 애니메이션 탭에 추가가 됩니다.

이렇게 추가가 되어 있는데요, 위 상황을 설명드리자면,
0부터 1초가 되는 동안 로테이션 45,45,45가 되겠다 인데,

원래 로테이션 값을 45,45,45로 설정했기 때문에 회전하지 않습니다.
그렇다면 1초 부분을 선택하고, z 값을 360으로 바꿔보겠습니다.

위 이미지처럼 해보세요.
그러면 아마 가로로 회전할 겁니다.

이해가 잘 안되신다면 영상을 참고하시길 바랍니다.
회전하는 속도가 너무 빠르면 1초가 아니라 2초로 늘려도 됩니다.

다 설정했으면 창을 닫으세요.

전 시작할 때 0,0,0 끝부분에는 0,360,360으로 했습니다.
그런 다음 게임을 실행시키면 아직도 회전하고있지 않을겁니다.

왜냐하면 적용이 안되어 있거든요.
그러면 적용을 시켜봅시다.

먼저 애니메이션 클릭하고(프로젝트 부분에 있습니다.)
모드를 루프로 바꿉시다. 계속 반복시켜야 하니까요.
그래야 무한히 빙글빙글 돌죠.

애니메이션이 추가되어 있군요. 이걸 드래그 앤 드롭하면 됩니다.
어디에 드롭해야 하냐면 아래 이미지를 참고하세요.

저 빨간색으로 표시된 곳에 드래그 앤 드롭하세요.

그러면 해당 애니메이션이 적용됩니다. 그리고 자동으로 애니메이션이 실행되도록,
플레이 오토매티컬리에 체크를 해주셔야 합니다. 다 했으면 게임을 실행시켜 보세요.

잘 돌아가는 것까지 확인했습니다.
다음 포스팅에서 아이템을 구현하겠습니다.

Toplist

최신 우편물

태그