TPS(3인칭) 캐릭터 조작 기능 구현하기 | 유니티

  Рет қаралды 38,619

WER's GAME DEVELOP YOUTUBE

WER's GAME DEVELOP YOUTUBE

Күн бұрын

유니티 엔진에서 TPS 삼인칭 백뷰 형식의 캐릭터를 조작하는 기능을 구현해봅시다.
영상에서 사용되는 박스맨 모델링과 애니메이션 파일을 다운로드 받을 수 있는 링크입니다.
drive.google.com/file/d/1EUdt...
타임라인
0:00 인트로
0:28 - 캐릭터 모델 임포트
0:37 - 애니메이션 세팅
1:26 - TPS 게임에서 주로 사용되는 카메라 구도 잡기
1:49 - 카메라 동작을 위한 게임 오브젝트 구조 설정하기
3:41 - TPSCharacterController.cs 스크립트 파일 생성
3:51 - 필요한 변수 선언
4:31 - 마우스의 움직임에 따라 카메라 회전 시키는 기능 구현
6:12 - 테스트 1
6:27 - 카메라 상하 움직임 제한하기
7:43 - 테스트 2
7:56 - Move 함수 선언
8:08 - 이동 방향 찾아내기
9:24 - 이동 기능 구현하기
10:31 - 이동할 때 캐릭터가 바라볼 방향
10:37 - 캐릭터가 이동할 때 카메라가 바라보는 방향 바라보게 하기
11:15 - 캐릭터가 이동할 때 이동 방향을 바라보게 하기
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
- 유니티 에셋스토어 : prf.hn/l/vJl41D5
- 유니티 플러스 : prf.hn/l/wLNyJZG
- 유니티 프로 : prf.hn/l/qXOybmp
[투네이션]
toon.at/donate/63773521276146...
[Patreon]
/ wergamedevchan
[디스코드 채널]
/ discord
본 영상의 오프닝은 비디오몬스터를 이용해서 만들어졌습니다.
videomonster.com/
#유니티강좌 #TPS #게임만들기 #유니티엔진 #게임만들기 #게임엔진 #베르 #베르의프로그래밍노트 #TPS #삼인칭 #조작법 #컨트롤 #Control

Пікірлер: 199
@youmissing6719
@youmissing6719 3 жыл бұрын
translate하고 오일러만 써서 움직이는거에 좀더 섬세한 동작을 위해 여러가지 생각을하다가 오늘 영상 보았는데 ... 하 진짜 개비스콘 한통먹은 느낌입니다. 너무 감사합니다.. 이전에는 정말 인위적인 방향보간이었는데.. 감사합니다!
@user-il3bo4if5w
@user-il3bo4if5w 4 жыл бұрын
게임켜서 움직여보면서 작동방식 기록하고 구현하려고 하루 종일 별짓다해보고 있었는데 그 다음날 이 영상보고 명쾌하게 해결되었습니다. 많은 시간 절약했습니다. 많이 배웠습니다. 감사합니다. 좋아요 처음 눌러보네요.
@wergia
@wergia 4 жыл бұрын
다른 게임을 분석하면서 만들어보는 것도 중요하죠!
@user-qt5th3wm7u
@user-qt5th3wm7u Жыл бұрын
Input을 Vector2 형태로 받는 건 생각도 못했는데 정말 대단하세요!!
@1202dd
@1202dd 2 жыл бұрын
베르님 정말 감사합니다! 설명도 깔끔하고 댓글 피드백도 잘해주셔서 매우 큰 도움 됐습니다 ㅎㅎ
@1202dd
@1202dd Жыл бұрын
진짜 다시봐도 추천 1000001번 누르고 싶네요 ㅜㅜ
@neil2725
@neil2725 Жыл бұрын
찬찬히 따라 하면서 많이 배웠습니다. 감사합니다.
@user-bv5zq4co5b
@user-bv5zq4co5b 2 жыл бұрын
진짜 진짜 감사합니다 베르님 도움이 많이 됐어요
@user-vb1nk2vp2u
@user-vb1nk2vp2u 3 жыл бұрын
질문 몇 개 있습니다. 그대로 따라서했는데 메인이 Empty 오브젝트여서 예를들어 캐릭터가 벽에 충돌한상태로 W키를 누르면 Empty오브젝트만 앞으로 가서 카메라랑 캐릭터랑 뒤틀립니다. 이럴 경우에는 Empty 오브젝트 기준이아닌 캐릭터 기준으로 해야하나요?? 또 만약 게임을 제작하다보면 카메라를 돌렸을 때, 벽속에 들어가는 현상이 있는데 이럴땐 카메라에 콜라이더를 넣어서 처리하나요?
@wergia
@wergia 3 жыл бұрын
1. 앞으로 가서 벽에 부딪히면 충돌체가 없는 카메라만 앞으로 이동하고 캐릭터는 멈춰서 틀어진다는 뜻인가요? 제가 만든 방식은 빈 게임오브젝트 + 충돌체 + 캐릭터 컨트롤러 ㄴ 캐릭터 모델링 ㄴ 카메라 암 ㄴ 카메라 이런 구조로 실제 충돌처리는 빈 게임 오브젝트가 해서 카메라와 캐릭터가 틀어지지 않는 방식으로 했습니다. 2. 카메라가 벽에 들어가지 않게 하는 방법은 여러가지가 있습니다. 카메라에 콜라이더를 넣어서 처리하는 방법도 있고 캐릭터에서 카메라가 있는 방향으로 Raycast라는 충돌감지 광선을 쏴서 감지된 거리가 캐릭터와 카메라 사이의 거리보다 짧으면 카메라를 당겨주는 방식도 사용할 수 있습니다.
@user-vb1nk2vp2u
@user-vb1nk2vp2u 3 жыл бұрын
@@wergia 답변 감사드립니당 1번에 질문했던 빈 오브젝트 밀림현상은 빈 오브젝트에 콜라이더 적용을 안하고 캐릭터에 적용하고 있었네요 캐릭터 콜라이더 제거하고 빈오브젝트에 적용하니까 안 밀립니다 2번 레이케스트는 함 알아봐야겠네요 ㅋㅋ 좋은 강의 감사드려요
@wergia
@wergia 3 жыл бұрын
@@user-vb1nk2vp2u 네 앞으로도 좋은 강의로 계속 찾아뵙겠습니다!ㅎㅎ
@user-pq4fe8wd1d
@user-pq4fe8wd1d 2 жыл бұрын
많은 도움이 되었습니다. 감사합니다.
@tea8124
@tea8124 Жыл бұрын
베르님 두번째 기능으로 제작했을때 부모 게임 오브젝트의 rotation값이 Vector3.zero가 아니었을 경우 이동 각도가 카메라 기준이되서 이상하게 움직이던데 하루종일 고민해도 해결방법을 못찾겠네요. 혹시 방법 알고계신가요?
@user-ws3sc1rt2n
@user-ws3sc1rt2n 3 жыл бұрын
안녕하세요 베르님 항상 신세지고 있습니다 다름이 아니라 궁금한 점이 있어 여쭤보려합니다 Vector3 lookRight = new Vector3(cameraArm.right.x, 0f, cameraArm.right.z).normalized;에서 Vector3 lookRight = new Vector3(cameraArm.right.x, cameraArm.right.y, cameraArm.right.z).normalized; 로 변경해도 캐릭터가 위로 이동하지 않던데 이유가 무엇인가요? Vector3 moveDir = lookForward * moveInput.y + lookRight * moveInput.x; 에서 두 벡터값을 더하므로 결국엔 moveDir의 y값에 right쪽에 카메라암의y값이 들어가는것이 아닌가요? forward에서는 0f로 해줘야 캐릭터가 위로 향하지 않는데 right는 0f로 하지않아도 캐릭터가 위로 향하지 않는 이유가 궁금합니다.
@wergia
@wergia 3 жыл бұрын
Vector3 lookRight = new Vector3(cameraArm.right.x, cameraArm.right.y, cameraArm.right.z).normalized; 로 코드를 변경해도 캐릭터가 위아래로 움직이지 않는 이유는 우선 Right 값은 Roll 회전이 발생하지 않는 이상 수평을 유지하기 때문입니다. Pitch와 Yaw 회전만 있으면 객체의 right는 기울어지지 않고 수평을 유지합니다. Vector3 moveDir = lookForward * moveInput.y + lookRight * moveInput.x; 에서 lookRight * moveInput.x를 처리하는 부분은 카메라 암의 y값이 들어가는게 아니라 플레이어의 좌우 입력 값의 크기와 캐릭터의 오른쪽 방향을 곱해서 좌우 움직임을 얼마나 보이게 만들지를 결정하는 겁니다.
@user-ws3sc1rt2n
@user-ws3sc1rt2n 3 жыл бұрын
@@wergia 이해했습니다 감사합니다!
@user-ws3sc1rt2n
@user-ws3sc1rt2n 3 жыл бұрын
@@wergia 안녕하세요 베르님. 한가지 더궁금한게 있습니다. 카메라가 벽을 통과하는 문제는 어떻게 해결해야 하나요? 카메라암에 콜라이더를 부착하라고 댓글에 말씀해주신걸 봤는데 아래 함수를 무브 함수에 추가해봤는데 잘안되서 질문드립니다. if(Physics.Raycast(CameraArmBox.center, Vector3.back, out hit, 3f)) { CharCamera.transform.position += Vector3.forward * Time.deltaTime * 5f; } else { CharCamera.transform.position = originPos * Time.deltaTime * 5f; } 여기서 정상적으로 통과하지 못하게하려면 어떻게 수정해야하나요? OriginPos는 카메라의 처음 시작 포지션값이고 CameraArmBox는 카메라암의 박스콜라이더이고 CharCamer는 SerializeField처리한 카메라입니다 도저히 알수가없어 질문합니다.. 답변부탁드리겠습니다.
@wergia
@wergia 3 жыл бұрын
@@user-ws3sc1rt2n 우선 RayCast를 쏘는 부분이나 RayCast를 쏴서 동작하는 맞은 위치를 검출했을 때와 못했을 때로 구분해서 처리하는 방향은 맞습니다. 다만 if(Physics.Raycast(CameraArmBox.center, Vector3.back, out hit, 3f))에서 레이캐스트를 사용하는 위치나 방향이 조금 잘못된것 같네요 우선 CameraArmBox가 어디를 중심으로 배치된 것인지 모르니 기존 코드에 있는 cameraArm을 기준으로 사용하는게 좋을 것 같습니다. 그리고 레이캐스트를 사용하는 방향으로 Vector3.back을 넣으셨는데 이 back은 cameraArm이 바라보는 방향 기준의 Back이 아니라 월드 중심 좌표가 기준이기 때문에 올바른 방향이 아닙니다. 그렇기 때문에 -cameraArm.forward를 사용해야 카메라 암이 바라보는 방향의 뒤를 구할 수 있습니다. 그리고 레이캐스트가 맞았을 때, CharCamera.transform.position += Vector3.forward * Time.deltaTime * 5f; 이런식으로 좌표를 더하고 있는데 이렇게 되면 카메라의 위치가 계속 더해져서 아예 다른 위치로 가게될 겁니다. 카메라의 위치를 정하기 위해서는 우선 레이캐스트로 구한 hit에서 맞은 거리를 hit.distance로 구할 수 있는데, 지금 카메라의 위치를 정할 때 로컬 좌표 중에 Z 값만 이용해서 사용하고 있기 때문에, CharCamera.transform.localPosition = new Vector3(0f, 0f, -hit.distance); 정도로 구하면될 것 같습니다.
@user-ws3sc1rt2n
@user-ws3sc1rt2n 3 жыл бұрын
@@wergia 감사합니다! 시도해보겠습니다
@Joohyunsang
@Joohyunsang 2 жыл бұрын
12분정도 되는 짧은 영상이지만 차근차근 곱씹어 보면 중요한 내용이 참 많은 것 같네요. 몇 번이나 반복해서 보면서 80% 정도는 이해하고 익힌 것 같습니다. 좋은 영상 정말 감사합니다!! 그런데 좌우로 움직이기, 뒤로 움직이기는 로직을 어떤식으로 구현하면 될까요? lookForward와 lookRight의 값을 기준으로 bool 을 추가해서 animator에 연동하면 될까요?
@wergia
@wergia 2 жыл бұрын
이동 방향 벡터를 매개변수로 해서 애니메이션 블랜딩을 걸어주시면 됩니다. 더 많은 질문이나 베르의 게임 개발 유튜브와 관련된 활동을 위한 디스코드 채널도 있습니다. 아래의 링크를 통해 방문하실 수 있습니다. discord.gg/tqmRTy4pgk
@user-zz3qf6cl7s
@user-zz3qf6cl7s 9 ай бұрын
상세한 설명, 잘 배웠네요
@qxp2468
@qxp2468 2 жыл бұрын
따라하면서 벡터, 쿼터니언, 오일러... 추가적으로 공부하느라 정신이 아찔했습니다. 덕분에 많이 배워갑니다 고딩 때 기하벡터 좀 제대로 해놓을껄 ㄷㄷㄷ;
@wergia
@wergia 2 жыл бұрын
저는 문송합니다 ㅜㅜ
@월억부부
@월억부부 3 жыл бұрын
안녕하세요 베르님! 영상 보면서 따라하는데 2분 57초 부분에서 빈 게임오브젝트에 카메라를 자식으로 넣었는데, 오브젝트를 선택하니까 카메라만 회전이 되는데 설정이 잘못된걸까요? 어디서 확인이 가능할까요??
@wergia
@wergia 3 жыл бұрын
카메라만 회전 된다는게 카메라 중심으로 회전이 된다는 뜻인가요?
@월억부부
@월억부부 3 жыл бұрын
@@wergia 네 맞아요 베르님!!!ㅠ 일단 캐릭터에 자식으로 넣어서 따라다니게는 만들었는데 영상처럼 캐릭터 중심으로 위아래로 보면 부자연스럽네요ㅠ
@wergia
@wergia 3 жыл бұрын
@@월억부부 설명만으로는 파악이 어렵네요. wedevpublic@gmail.com으로 영상이나 프로젝트 보내주시면 제대로 답변 드릴 수 있을 것 같아요.
@user-zk9zf5os6q
@user-zk9zf5os6q 4 ай бұрын
다운로드에 애니메이션은 없나용..? prefab 만 있는데 prefab 도 똑같은 Boxman@ 만 4개가 있네요 뒤에 붙은 run , attack 이런건 무슨 차이인가요?
@jjjjjjhhjh
@jjjjjjhhjh 3 жыл бұрын
선생님 제가 tps 만드는데 일반 이동시엔 이동방향으로 바라보고 조준시엔 카메라 방향 바라보게 만들었는데 이렇게 만들고 벡터 slerp로 돌리니까 조준하다 조준 풀고 뒤로 걸으면 y축회전을 안하고 x z축 회전을 해버리는데 이건 어떻게 고정 시켜야 할까요??
@jjjjjjhhjh
@jjjjjjhhjh 3 жыл бұрын
해결했습니다 좋은강의 감사합니다
@wergia
@wergia 3 жыл бұрын
답변 드리기 전에 먼저 해결해버리셨군요! 실력 상승 속도가 굉장하십니다! 지금 계속 야근에 주말 근무 중이라 답변이 어렵네요ㅜㅜ
@조폐
@조폐 2 жыл бұрын
11:36 캐릭터가 이렇게 하늘 떠 다니는데 안떠다니고, 벽이나 이런거에 막히게 하는 방법이 없나요..? Rigidbody,Capshule 콜라이더 사용해봤구, 캐릭터 컨트롤러도 사용해봤는데 계속 공중에 떠있고, 통과 합니다 ㅠㅠ
@wergia
@wergia 2 жыл бұрын
Rigidbody 컴포넌트를 추가하고 Use Gravity 옵션을 켜보세요.
@user-pq4fe8wd1d
@user-pq4fe8wd1d 2 жыл бұрын
자식 오브젝트로 넣었을때 기즈모가 카메라로 이동하는 분은 유니티 최상단 메뉴 바로 아래에 있는 Pivot or Center이라고 적혀있는 토글버튼을 눌러 Pivot에 놓으면 됩니다.
@darkandsteveandsam
@darkandsteveandsam 2 жыл бұрын
감사합니다......... 이것 때문에 한참을 고민했네요
@darkandsteveandsam
@darkandsteveandsam 2 жыл бұрын
추가로 Pivot or Center 아이콘은 보통 씬 바로 아래 네모에 대각선 선분 하나 그려져 있는 아이콘입니당.
@KuRung.
@KuRung. 3 жыл бұрын
질문 있습니다 2:55 에 1.빈 오브젝트만들고 2.오브젝트를 캐릭터 머리 높이에 맞추고 3.카메라를 오브젝트에 넣었더니 시점이 오브젝트(캐릭터머리)기준으로 도는게아니라 카메라기준으로 돌고있습니다 혹시 해결방법 아십니까?
@wergia
@wergia 3 жыл бұрын
cameraArm프로퍼티에 CameraArm 오브젝트를 넣어주셨나요?
@KuRung.
@KuRung. 3 жыл бұрын
@@wergia 다른방법으로 해결하엿습니다 답변감사합니다..
@월억부부
@월억부부 3 жыл бұрын
@@KuRung. 저도 똑같은데 어떻게 해결하셨나요 혹시?
@user-te1tp4lt9g
@user-te1tp4lt9g 3 жыл бұрын
강의가 유니티 카메라를 다루는 법에 대해 참고가 정말 많이 되었습니다. 다만 궁금한 것이 있어 이렇게 남기게 되었습니다. 다름이 아니라, 카메라 회전을 상하를 못움직이게 한상태로 정면을 바라본 상태에서 캐릭터를 중심으로 회전을 키보드 Q,E 버튼으로 돌게 하려면 어떻게 하면 좋을지 계속 이 코드를 중심으로 다뤄보다가 잘 안되고 어려워서 글을 남기게 되었습니다. 붕괴3rd 라는 게임이 있는데, 그 게임에서 화면의 시점이 pc버전을 기준으로 Q, E 가 캐릭터를 기준으로 회전하는데 이 기법을 이 코드로 적용하면서 바꿔나가는건 무리수인지 아니면 아예 처음부터 다른 코드로 다시 짜야되는건지 궁금합니다.
@wergia
@wergia 3 жыл бұрын
영상에서 작성한 코드로도 말씀하신 대로 충분히 수정이 가능합니다. LookAround() 함수를 보면 아래와 같이 회전값을 추출할 떄 마우스 값을 가져와서 사용하는 것을 볼 수 있습니다. private void LookAround() { // 마우스 이동 값 검출 Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); // ... 생략 } 이 때 위/아래 회전 없이 Q, E로 좌/우 회전을 시킨다고 하셨으니 매개변수로 카메라가 회전할 방향을 가져오고 그 값을 "Mouse X"의 위치에 넣어주고 "Mouse Y"에는 0을 넣어줍니다. private void LookAround(float rotationDir) { // 마우스 이동 값 검출 Vector2 mouseDelta = new Vector2(rotationDir, 0f); // ... 생략 } 그리고 Update() 함수를 보면 LookAround() 함수를 매개변수 없이 호출 중인데 여기에 Q, E 키의 입력상태에 따라서 rotDir의 값을 바꿔서 LookAround() 함수의 매개변수로 넣어주면 됩니다. void Update() { float rotDir = 0f; if (Input.GetKey(KeyCode.Q)) { rotDir -= 1f; } if (Input.GetKey(KeyCode.E)) { rotDir += 1f;} LookAround(rotDir); Move(); } 아마 이렇게 해보면 원하시는 기능이 작동할 거라고 생각합니다. 그리고 회전 방향과 속도는 rotDir의 값을 어떻게 주느냐에 따라 달라질 겁니다.
@user-te1tp4lt9g
@user-te1tp4lt9g 3 жыл бұрын
@@wergia 일단 해봤는데, 카메라가 캐릭터를 공전하는 걸로 3인칭으로 보는걸 생각했는데, 자전하는것 같습니다. 혹시 플레이어 주변을 원으로 그리면서 공전하게 한다면 좀더 추가해야될게 있을까요? 그리고 그 코드를 써봤는데 Move()함수에 문제가 있어서 캐릭터 이동이랑 같이 쓰니 좀 꼬이네요. WASD를 누르면 캐릭터의 이동에 상관없이 카메라가 앞으로갑니다.(캐릭터를 추월합니다.) 그래서 일단 지우고 다른걸로 테스트중인데 일단 다른점을 꼽자면 애니메이터에서 뒷걸음과 옆걸음에 관한걸 설정한건 아닌상태로 진행했습니다. 제가 애니메이션을 전부 설정을 안해서 그런걸까요...?
@user-te1tp4lt9g
@user-te1tp4lt9g 3 жыл бұрын
좀더 첨부하면 캐릭터가 자전하는게 아니라 카메라가 자전하네요
@wergia
@wergia 3 жыл бұрын
@@user-te1tp4lt9g 카메라가 자전한다는 것은 카메라가 캐릭터 주변으로 원을 그리지 않고 카메라만 제자리에서 바라보는 방향만 바뀐다는 뜻이겠죠? 음 영상에서 1:49 쯤에 기능을 만드는 과정을 보면 카메라를 단독으로 두지 않고 중심을 캐릭터 쪽에 맞춘 Camera Arm이라는 게임오브젝트를 만들고 그 아래에 카메라를 두는 것을 볼 수 있습니다. 이 카메라 암 오브젝트를 회전시키면 카메라가 캐릭터를 중심으로 회전할 겁니다.
@user-te1tp4lt9g
@user-te1tp4lt9g 3 жыл бұрын
@@wergia 감사합니다 다시한번 확인해 보겠습니다.
@user-bx9fz9og8o
@user-bx9fz9og8o 2 жыл бұрын
베르님 혹시 rigidbody에 의한 이동은 카메라가 같이 이동하지 않는데 해결 방법이 있을까요?? collider벽에 비비고 있으면 카메라가 다른곳으로 가버립니다 ㅠㅠ
@wergia
@wergia 2 жыл бұрын
카메라가 rigidbody로 움직이는 오브젝트를 따라가도록 하면 어떨까요?
@user-bx9fz9og8o
@user-bx9fz9og8o 2 жыл бұрын
​@@wergia 베르님 cameraArm.postion = characterBody.postion 이렇게 하라는 말씀인가요?? 이렇게 하면 카메라 위치가 이상하게되는데 어떤식으로 카메라가 오브젝트를 따라가도록 할까요??
@MountainCATi
@MountainCATi Жыл бұрын
우선 새해 복 많이 받으시고 하시는 모든 일들이 좋은 결과가 있으시길 바랍니다. 좋은 강의 늘 감사합니다. 조금 시간은 걸리지만 프로그램을 구상하고 구현하는데 많은 공부가 되고 있습니다. 본 강의를 들으면 사소한 문제가 발생하면 다시 지우고 다시 따라 써보고 하고 있습니다. 카메라의 회전을 "오른쪽마우스"를 누르고 있을 때로 구현 하고 싶은데. 시도해 본 방법 1 private void LookAround() { if(input.GetMounseDown(1))
@MountainCATi
@MountainCATi Жыл бұрын
혼자 질문하고 혼자 해결하고.... private void Update() { if (Input.GetMouseButton(1)) { LookAround(); } Move(); }
@Krispy_Donuts
@Krispy_Donuts 3 жыл бұрын
대각선 방향키를 입력할 때 normalized가 적용이 안되어 이동속도가 늘어나길레 moveDir에도 normalized를 추가하였는데 게임을 실행하고 이동하다 방향키에서 손을 떼었을때 즉시 멈추는게 아니라 조금 더 이동하다 멈추네요 이걸 해결할 방법은 없을까요 Vector3 LookForward = new Vector3(CameraPoint.forward.x, 0f, CameraPoint.forward.z).normalized; Vector3 lookRight = new Vector3(CameraPoint.right.x, 0f, CameraPoint.right.z).normalized; Vector3 moveDir = (LookForward * moveInput.y + lookRight * moveInput.x).normalized; CharaBody.forward = moveDir; transform.position += moveDir * Time.deltaTime * MoveSpeed;
@wergia
@wergia 3 жыл бұрын
normalized 대신에 ClampMagnitude 함수를 사용해서 이동 벡터의 길이를 제한해보세요 transform.position += Vector3.ClampMagnitude(moveDir, 1f) * Time.deltaTime * 5f;
@user-fg7tv1fz7p
@user-fg7tv1fz7p 2 жыл бұрын
안녕하세요 베르님 문제가 발생하였는데 해결을 못해 질문 드립니다. 플레이어가 이동은 8방향으로 전부 이동이 가능한데 대각선 방향으로 멈추면 바라보는 방향으로 멈추지 않는 현상이 있습니다. 그래서 나름 해결을 해보려고 하였지만 잘 해결이 되지 않아 이렇게 댓글 남깁니다. animator.SetBool("isMove", isMove); if(isMove) { Vector3 lookForward = new Vector3(CameraArm.forward.x, 0f, CameraArm.forward.z).normalized; Vector3 lookRight = new Vector3(CameraArm.right.x, 0f, CameraArm.right.z).normalized; Vector3 moveDir = lookForward * moveInput.y + lookRight * moveInput.x; characterBody.forward = moveDir ; if (moveInput.magnitude != 0) Rotation(); transform.position += moveDir * Time.deltaTime * 5f; } } void Rotation() { MovePos.Set(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); Quaternion q = Quaternion.LookRotation(CameraArm.TransformDirection(MovePos)); if (MovePos == Vector3.zero) transform.rotation = q; } 여기서 어느 코드에 문제가 있는지 알 수 있을까요??
@wergia
@wergia 2 жыл бұрын
캐릭터의 방향을 잡아주는 characterBody.forward = moveDir;를 if (moveInput.magnitude != 0) 조건문 안으로 넣어서 입력이 있는 상황에서만 방향을 변경하도록 해주세요.
@user-fg7tv1fz7p
@user-fg7tv1fz7p 2 жыл бұрын
그래도 같은 현상이네요... ㅜㅜ
@user-ee9bn3jb5e
@user-ee9bn3jb5e 2 жыл бұрын
와 개 지린다
@PJSKorea
@PJSKorea 3 жыл бұрын
이동시에 캐릭터 이동속도랑, 카메라 이동속도가 다른속도로 움직이는데 원인이 뭘까요? 박스맨이 아닌, 에셋스토어에서 BasicBandit 모델 사용중입니다.
@wergia
@wergia 3 жыл бұрын
카메라를 캐릭터의 자식 오브젝트로 만드셨나요?
@PJSKorea
@PJSKorea 3 жыл бұрын
@@wergia 제가받은 캐릭터 애니메이션 자체에 전진하는 기능이 있어서 그런것 같습니다. maximo에서 애니메이션 inplace체크하고 받으니까 얼추 잘 돌아갑니다. 문제는 이제 wsad로 움직이는 도중에 마우스로 시점을 봐꾸면 서서히 카메라좌표가 이상한쪽으로 가는 버그가 발생하네요 ㅠㅠ 어제 하루종일 원인찾다가 결국 해결못하고 에셋스토어에 tps패키지있는거 임포트해서 썼습니다.. (아마 애니메이션 전환쪽에서 뭔가 꼬인거 같아요! 연구좀 해봐야될듯 하네요)
@user-zc4px7wq3r
@user-zc4px7wq3r 3 жыл бұрын
혹시 1:17 에서부터 에니메이터 컨트롤러가 없고 직접 추가해도 아바타부분에서 아무것도 선택할수 없는건 어떻게 해결할 수 있을까요?
@wergia
@wergia 3 жыл бұрын
애니메이션이 있은 FBX 모델링을 씬에 올리면 자동으로 애니메이터 컨트롤러 컴포넌트가 붙은 상태로 올라가는 것으로 알고 있습니다. FBX 파일을 다시 임포트해서 올려보시는건 어떨까요?
@user-zc4px7wq3r
@user-zc4px7wq3r 3 жыл бұрын
@@wergia 해결이 안되서 다른 소스 들고와서 해결 했습니당! 혹시 카메라 회전 감도를 변경하려면 어떤 값에 손대야 할까요? 막 바꿔봤더니 카메라가 맘대로 왔다갔다하네요 ㄷㄷㄷ..
@wergia
@wergia 3 жыл бұрын
@@user-zc4px7wq3r 캐릭터컨트롤러 클래스의 LookAround 함수에서 Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); 이렇게 마우스 델타를 구하는 부분에서 Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X") * sensitivity, Input.GetAxis("Mouse Y") * sensitivity); 이렇게 감도 값을 곱해주면 됩니다. 좌우 감도와 상하 감도를 따로 주고 싶으면 Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X") * HorizontalSensitivity, Input.GetAxis("Mouse Y") * VerticalSensitivity); 이렇게 변수를 따로 곱해줘도 됩니다.
@langsam2931
@langsam2931 3 жыл бұрын
move 함수말고 물리적으로 (rigid) 움직임 구현하려는데 여기서 많이 뜯어 고쳐야겠죠..?
@wergia
@wergia 3 жыл бұрын
Move 함수에 transform.position 대신에 물리로 움직이도록 만들어주면 되겠죠...?
@user-vm9cc6bn4v
@user-vm9cc6bn4v 3 жыл бұрын
특정시점의 카메라 x,y,z 각도를 변수에 담아놓고 싶은데요. Vector3 변수이름; 이나 int 등등의 종류로 변수를 선언해도 변수 = 카메라의 각도; 로 변수에 각도값을 담으면 오류가 떠요ㅠㅠ
@wergia
@wergia 3 жыл бұрын
transform.rotation을 저장하려고 하신건가요? rotation은 Quaternion 타입입니다. Quaternion 타입의 변수를 선언해서 저장해보세요.
@user-sp6dy4wt2g
@user-sp6dy4wt2g 4 жыл бұрын
10:12 에 lookright를 구하는 이유와 y 값을 0으로 구하는 이유가 궁금합니다 lookforward는 y를 캠의 y값으로 하면 플레이어가 위 아래로도 움직이기 때문에 0를 하는건 알겠는데 lookright는 캠의 y값으로 해도 문제가 없어보이더라고요
@wergia
@wergia 4 жыл бұрын
네, 그 부분은 사실 camArm.right를 그대로 써도 문제없을 겁니다. 아마 빠르게 작업한다고 앞의 코드를 복사해서 그렇게 된 것 같네요.
@user-sp6dy4wt2g
@user-sp6dy4wt2g 4 жыл бұрын
@@wergia 다행이네요 감사합니다
@user-sp6dy4wt2g
@user-sp6dy4wt2g 4 жыл бұрын
@@wergia 혹시 캐릭터의 forward를 moveDir로 해놓고 대각선으로 움직인 뒤 멈추면 캐릭터가 회전하지 않나요? 왼쪽 앞 대각선으로 움직이다 멈춘다 하면 캐릭터 보는 방향이 대각선이 아니라 앞이나 왼쪽으로 회전하고 멈추네요 제가 잘못된건가요 아니면 심화과정?인건요
@wergia
@wergia 4 жыл бұрын
@@user-sp6dy4wt2g 모든 방향으로 자유롭게 이동할 수 있는 조이스틱에서는 벌어지지 않는 문제이지만 키보드는 8방향으로 입력이 제한되어 있고, 전후좌우를 제외한 대각방향은 키 조합으로 이동이 이루어지기 때문에 동시 입력한 두 방향의 키에서 손을 동시에 떼지 않으면 말씀하신것과 같은 문제가 일어납니다. 키보드에서 이런 문제를 해결하기 위해서는 최근 입력한 이동 방향을 기억해두었다가 입력이 끝났을 때 그 방향 바라보게 하는 등의 후처리가 들어가야 합니다.
@user-sp6dy4wt2g
@user-sp6dy4wt2g 4 жыл бұрын
​@@wergia 여기서 더 들어가야 원하는게 되는거군요 답변 감사합니다
@user-fl2sn1tb4e
@user-fl2sn1tb4e 4 жыл бұрын
혹시 벽이랑 닿았을때 계속 앞으로가는키 누르면 카메라가 흔들린다거나 가끔씩 벽도 뚫리는데 이런건 어떻게 해결해야할까요
@wergia
@wergia 4 жыл бұрын
우선 카메라가 벽을 뚫고 지나가는 문제는 카메라 암에 콜라이더를 달거나 카메라 뒤 방향으로 레이캐스트를 쏴서 거리를 측정한 뒤 충돌한 물체가 있다면 카메라의 위치를 앞으로 당기는 식으로 파고드는 문제를 해결할 수 있습니다. 그리고 벽에 충돌한 상태에서 카메라가 흔들리는 문제는 이동 처리인 Move 함수를 Update 함수가 아닌 FixedUpdate 함수로 옮겨서 처리해보세요. FixedUpdate 함수는 유니티 엔진에서 물리 계산과 동일한 시점에 코드를 실행하기 때문에 콜라이더와 충돌했을 때 타이밍이 어긋나지 않아서 떨림이 사라질 겁니다.
@darkandsteveandsam
@darkandsteveandsam 2 жыл бұрын
영상 잘 봤습니다, 다만 3인칭 게임중 마우스 휠 올리고 내리는 것으로 줌인 줌아웃 하는 기능이 있는데 이건 어떻게 구현할수 있나요? 유니티 씬 창에서 마우스 휠로 줌인 줌아웃 하는거 말하는겁니다..
@wergia
@wergia 2 жыл бұрын
kzbin.info/www/bejne/ZnLbn5mGnMStick 이 영상 참고해보시면 될 것 같아요
@darkandsteveandsam
@darkandsteveandsam 2 жыл бұрын
@@wergia 감삼다!
@user-qv6qs7cx5h
@user-qv6qs7cx5h Жыл бұрын
선샌님 옆으로 움직일때랑 뒤로 움직일때 애니메이션 넣으려고 하는데 어떻게 해야하나요?
@user-qx4kq5lf1z
@user-qx4kq5lf1z 3 жыл бұрын
missingcomponentexception there is no 'animator' attached to the.....이렇게 뜨는데 해결 방법이 있을까요??
@wergia
@wergia 3 жыл бұрын
게임 오브젝트에 Animator 컴포넌트가 붙어있지 않다는 에러입니다. 해당 오브젝트에 Animator 컴포넌트를 붙여주세요.
@user-xo9lh2bj1r
@user-xo9lh2bj1r 4 жыл бұрын
혹시 캐릭터가 뒤로갈때는 캐릭터 방향이 바뀌는게 아니라 뒷걸음질하는 애니메이션이 실행되게하려면 어떻게해야 할까요
@wergia
@wergia 4 жыл бұрын
캐릭터가 뒤로 이동할 때 뒷걸음질하는 애니메이션을 실행되게 하려면 10:37 처럼 이동시 캐릭터가 바라보는 방향을 카메라 방향으로 고정시키고 캐릭터의 이동 방향에 따라 각 방향의 애니메이션을 재생시켜주면 됩니다. 이 때 각 방향의 이동 애니메이션을 자연스럽게 섞이게 만들기 위해서 애니메이션 블랜드( kzbin.info/www/bejne/i2a8gnWmgL6brKs )를 사용하면 좋습니다.
@user-xo9lh2bj1r
@user-xo9lh2bj1r 4 жыл бұрын
@@wergia 영상에 나와있었네요 감사합니다!
@saf4888
@saf4888 3 жыл бұрын
다 완료가 됬는데 움직일때 카메라가 부드럽지 않고 끊기면서 움직이는데 어떡하나요?
@wergia
@wergia 3 жыл бұрын
움직임을 처리하는 함수를 FixedUpdate 함수로 옮겨보세요!
@mogu_m0gu
@mogu_m0gu 3 жыл бұрын
제 캐릭터가 큐브같은 콜라이더가 적용된 물체랑 부딪힌 상태로 앞으로 가면 플레이어는 가만히있는데 카메라가 앞으로 이동해버려서 시점이 어긋나는데 이런건 어떻게 해결해주어야 할까요?
@wergia
@wergia 3 жыл бұрын
카메라가 캐릭터의 자식 오브젝트로 되어있나요?
@mogu_m0gu
@mogu_m0gu 3 жыл бұрын
@@wergia 네! Character의 자식오브젝트로 CameraArm이있고 그 아래에 Main Camera가 있는 상태에요
@mogu_m0gu
@mogu_m0gu 3 жыл бұрын
예를들면 박스맨과 큐브가 부딪히게되면 박스맨은 큐브에 부딫혀서 멈춰있는데 그 상태에서 제가 W를 계속 누른다면 카메라만 앞으로 가게되는 현상이에요 어떻게 고치면 좋을까요?
@Krispy_Donuts
@Krispy_Donuts 3 жыл бұрын
@@mogu_m0gu 혹시나 해결방안이 될까 의견을 내봅니다 새로운 스크립트를 생성하고 CameraArm을 Character에게 고정되어 움직이도록 코드를 짜보는건 어떨까요 public Transform target; public Vector3 offset; void Update() { transform.position = target.position + offset; } 스크립트를 CameraArm에 집어넣고 Target에 Character 오브젝트를 집어넣고 Offset에 CameraArm을 고정시키고싶은 좌표를 설정한 후 실행하시면 Character 오브젝트가 벽에 부딪혀 이동하지 못하여도 CameraArm에 넣어둔 스크립트로 Character에 위치가 고정되어있어 카메라 혼자 여행다니지 않을껍니다
@mogu_m0gu
@mogu_m0gu 3 жыл бұрын
@@Krispy_Donuts 답변 감사합니다 ㅎ 제가 유니티에 대한 이해도가 아직 좀 낮아서 발생한거였어요 콜라이더 이리저리 만지다가 해결하긴 했는데 써주신 아이디어도 정말 좋은방법인거같아요. 감사합니다
@Dev-jj8jh
@Dev-jj8jh 3 жыл бұрын
euler를 처음 봤어요! 혹시 관련 영상 있을까요??
@wergia
@wergia 3 жыл бұрын
벡터 영상에서 가볍게 다루고 지나간 적이 있습니다. 오일러 각은 Vector3로 회전을 표현하는 방법입니다. 기본적으로 유니티에서는 Quaternion이라는 클래스로 오브젝트의 회전을 표현하는데 이 쿼터니언 방식은 값으로 회전을 유추하거나 계산하는게 어렵기 때문에 간단한 방식인 오일러 방식으로 변환해서 사용하는 겁니다. kzbin.info/www/bejne/eHnLn5een8iHqdk
@user-zr1ur1pq3v
@user-zr1ur1pq3v 4 жыл бұрын
혹시 오르막길이나 내려막길을 자연스럽게 이동하는법 강의 가능 하신가요? 평면이면 괜찮은데 오르막길을 일 때 이동하면 땅에 박을려고 해서 이동속도가 줄어들어요.
@wergia
@wergia 4 жыл бұрын
일단 간단하게 설명드리자면 캐릭터와 지면을 높이가 2인 캡슐 콜라이더를 이용해서 바닥을 뚫지 못하게 했을 때, 캡슐의 중심에서 바닥으로 레이캐스트를 쏘면 높이가 거의 1일겁니다. 하지만 내리막길이나 오르막길에서는 캡슐 콜라이더 바닥면의 굴곡때문에 그 높이가 1보다 크게 됩니다. 그 때 캐릭터의 몸체를 조금 더 눌러준다면 캐릭터가 좀 더 자연스럽게 경사면을 움직일 수 있게 될 겁니다. 다음에 기회가 되면 영상에서도 한 번 다뤄보도록 하겠습니다.
@CuteLanto
@CuteLanto 3 жыл бұрын
다른건 모르겠지만 목소리 하나는 좋으시네요..ㅎㅎ 근데 영상길이를 줄이려는 의도인지는 모르겠으나 속도가 너무 빨라요...ㅠㅠ 별4.99999999999999999999999999999999999999999999999999999999999개!
@wergia
@wergia 3 жыл бұрын
다들 코드 쳐야될때는 일시정지를 하면 된다고 하셔서 ㅎㅎ 그리고 최근 영상에는 일시정지 타이밍을 조금 더 잘 잡으실 수 있게 코드 작성이 끝난 다음에 잠시 기다렸다가 설명을 시작하고 있어요 ㅎㅎ
@CuteLanto
@CuteLanto 3 жыл бұрын
@@wergia 앗! 그런 비법이!!
@jagan0821
@jagan0821 2 жыл бұрын
감사합니다. 카메라 이동 부분이 큰도움이 됐습니다. 그 혹시 카메라 방향으로 캐릭터의 시선처리를 하고싶은데 애니메이션으로 로테이션값이 고정돼있는데 어떻게 방법이 없을까요?
@wergia
@wergia 2 жыл бұрын
IK라는 기능으로 머리부분쪽을 따로 움직여주시면 됩니다.
@jagan0821
@jagan0821 2 жыл бұрын
@@wergia 아하 IK에 대해서 좀 공부해봐야 겠네욤 감사합니다!
@helloworld06
@helloworld06 3 жыл бұрын
여러번 해서 드디어 6:09 이부분에서 스크립트가 들어가는데 characterBody 랑 camereArm 이 나오지 않습니다 왜이럴까요,,
@wergia
@wergia 3 жыл бұрын
프로퍼티가 인스펙터에서 안보이는 경우는 보통 셋 중에 하나입니다. 1. 코드에 에러가 있을 경우 2. 해당 프로퍼티를 선언할 때 public으로 선언하지 않은 경우 3. 해당 프로퍼티를 private으로 선언하고 [SerializeField] 어트리뷰트를 붙이지 않은 경우 세 가지 경우를 한 번 확인 해보면 좋을 것 같습니다.
@helloworld06
@helloworld06 3 жыл бұрын
@@wergia 막 입문자라 무작정 코드 베껴 쓰는데 오타난 부분이 있어서 수정했더니 the script don't inherit a native class that can manage a script 라고 뜹니다 안터넷에서 찾아봐도 답이 안나와서 벌써 코드만 다시쓰기 여러번 했네요,, (유니티 2020 최신버전 씁니다)
@wergia
@wergia 3 жыл бұрын
@@helloworld06 그럼 .cs 파일의 이름과 클래스의 이름도 완전히 일치하나요? 그 외에도 문제가 없는데 계속 에러가 뜬다면 forum.unity.com/threads/the-script-dont-inherit-a-native-class-that-can-manage-a-script.1011988/ 유니티 포럼의 해달 스레드에서 유니티 2020의 버그인 것 같다는 내용은 발견했습니다. 먼저 새로 프로젝트를 생성해서 같은 문제가 발생하는지 테스트하고, 만약 같은 문제가 발생한다면 유니티 2019로 버전을 낮춰서 해보시길 권해드립니다.
@helloworld06
@helloworld06 3 жыл бұрын
@@wergia 파일 이름이 일치하는데도 문제가 발생해서 2019 버전으로 시도 해봤는데 2019 버전에서는 이름이 같지 않다고 뜹니다 이름은 같은데 말이죠..
@helloworld06
@helloworld06 3 жыл бұрын
@@wergia 2d게임도 만드려 보려 만드는데 거기도 변수가 안나오네요
@I_am_jake1104
@I_am_jake1104 Жыл бұрын
마지막에서 카메라를 멀리두고 움직이면 플레이어가 돌아요
@lil_jong_lil
@lil_jong_lil 2 жыл бұрын
가만히잇어도 런 애니메이션이 계속 재생되는데 해결법 아시나요?
@wergia
@wergia 2 жыл бұрын
애니메이터 컨트롤러에서 런 애니메이션이 디폴트 스테이트로 설정되어 있지 않나요?
@user-vj3om6gh4w
@user-vj3om6gh4w 3 жыл бұрын
깃허브 링크가 404로 나오네요... 다시 올려주실 수 있으신가요?
@wergia
@wergia 3 жыл бұрын
다운로드 가능한 링크로 수정했습니다! 알려주셔서 감사합니다!
@KongGPatG
@KongGPatG 3 жыл бұрын
w에서 손을떼면 캐릭터가 특정방향으로 무조건 틀어져요..ㅜㅜ 해결할방법 없을까요
@wergia
@wergia 3 жыл бұрын
characterBody.forward = moveDir; 할 때, if(moveInput.magnitude != 0f) { characterBody.forward = moveDir; } 이렇게 움직임 입력이 0이 아닐 때만 방향처리하도록 만들어주면 됩니다.
@KongGPatG
@KongGPatG 3 жыл бұрын
@@wergia 우와 감사합니다!!ㅜㅜㅜ
@intb653
@intb653 3 жыл бұрын
현직 프로이신거 같아요.
@wergia
@wergia 3 жыл бұрын
나름 현업으로 일하고는 있지만 프로급인지는 모르겠네요 ㅜㅜ
@user-ys7tt5wf2t
@user-ys7tt5wf2t 3 жыл бұрын
3:04 2020버전에서는 자식 게임 오브젝트로 만들어도 영상처럼 캐릭터를 기준으로 회전이 되질 않네요ㅠㅠㅠ
@wergia
@wergia 3 жыл бұрын
2020에서 한 번 테스트 해봐야겠네요!
@user-ys7tt5wf2t
@user-ys7tt5wf2t 3 жыл бұрын
@@wergia 2019버전은 잘 되는데 왜 2020부터는 안 될까요ㅠㅠ
@user-pq4fe8wd1d
@user-pq4fe8wd1d 2 жыл бұрын
유니티 상단 메뉴 바로 밑에 Pivot or Center를 선택할 수 있는 버튼이 있습니다. 해당 버튼을 Pivot에 놓으면 영상처럼 부모 오브젝트를 기준으로 회전이 됩니다.
@astragoldn5780
@astragoldn5780 3 жыл бұрын
마우스 휠로 줌 인 아웃 하다가 1인칭 시점으로 바뀌게 한다거나 가능한가요?
@wergia
@wergia 3 жыл бұрын
기능을 좀 더 구현하면 가능합니다
@astragoldn5780
@astragoldn5780 3 жыл бұрын
@@wergia 줌으로 1인칭 시점으로 바뀌는걸 구현해봤는데... CharactetBody.forward = moveDir로 하니 옆으로 움직일때 어깨가... CharactetBody.forward를 일반 TPS 시점으로 움직일때는 moveDir로 무기를 들었을때나 1인칭일때는 lookForward로 바꾸려면 어떻게 해야할까요.
@wergia
@wergia 3 жыл бұрын
@@astragoldn5780 1인칭과 3인칭을 오갈 수 있는 게임에서는 보통 1인칭용 모델링과 3인칭용 모델을 따로 사용합니다. 1인칭 모드로 바뀌면 팔만 있는 모델을 사용해서 몸이 카메라를 가리지 않도록하고 3인칭 모드로 바뀌면 팔만 있는 모델을 숨기고 몸 전체 모델링을 보여주는 방식으로 말이죠.
@astragoldn5780
@astragoldn5780 3 жыл бұрын
@@wergia 멀티 플레이시에는 자신에게만 1인칭+3인칭, 다른 플레이어에게는 3인칭 모델만 보여주는 식인가요?
@astragoldn5780
@astragoldn5780 3 жыл бұрын
또 총을 들고 조준할때 같은 상황에서 lookForward로 전환하도록 할수있었으면 합니다.
@user-dy2ku2qm9v
@user-dy2ku2qm9v 2 жыл бұрын
유니티의 카메라 스크립트는 어떻게 짜신건가요? 전 이해가 좀 안가는데
@wergia
@wergia 2 жыл бұрын
정확히 어떤 부분이 이해가 안되시는 건가요?
@user-dy2ku2qm9v
@user-dy2ku2qm9v 2 жыл бұрын
@@wergia 그 3인칭 카메라 스크립트는 어떻게 짜신 건가요? 혼자서 짜신건가요?
@user-qd3xt9nl4r
@user-qd3xt9nl4r 2 жыл бұрын
이동방향을 구할 때 lookRight는 왜구하는건가요
@wergia
@wergia 2 жыл бұрын
lookRight를 구해둬야 A키나 D키 등 좌우 이동키를 입력했을 때 좌우 이동을 할 수 있기 때문입니다.
@user-whitesheep
@user-whitesheep 2 жыл бұрын
Vector3 lookForward = new Vector3(CameraArm.forward.x, 0f, CameraArm.forward.z).normalized; Vector3 lookRight = new Vector3(CameraArm.right.x, 0f, CameraArm.right.z).normalized; 이 코드 부분이 이해가 안되는데 혹시 설명해주실수 있으신가요..
@wergia
@wergia 2 жыл бұрын
카메라 방향에서 높이 값을 제거하고 순수하게 캐릭터 위치에서 정면과 오른쪽 방향을 추출해내는 코드입니다.
@user-whitesheep
@user-whitesheep 2 жыл бұрын
@@wergia 답변 감사합니다.
@user-ye7ou3je9x
@user-ye7ou3je9x 3 жыл бұрын
베르님 다름이 아니라 카메라 감도가 너무낮은데 좀 높일수 있나여?
@wergia
@wergia 3 жыл бұрын
LookAround 함수에서 cameraArm.rotation을 이렇게 바꿔주고 있는데 cameraArm.rotation = Quaternion.Euler(camAngle.x - mouseDelta.y, camAngle.y + mouseDelta.x, camAngle.z); 이거를 cameraArm.rotation = Quaternion.Euler(camAngle.x - mouseDelta.y, camAngle.y + mouseDelta.x * sensitity, camAngle.z); 이렇게 화면 회전에 sesitivity 값을 곱해서 조정해주면 될거에요
@user-ye7ou3je9x
@user-ye7ou3je9x 3 жыл бұрын
감사합니다 ㅎ
@nover0428
@nover0428 Жыл бұрын
플레이어를 움직이며 큐브에 닿으면 플레이어가 밀리면서 이동이 이상해져요 이거 해결방안이 있을까요?
@wergia
@wergia Жыл бұрын
어떤 방식으로 이상해지나요?
@nover0428
@nover0428 Жыл бұрын
그 플레이어 이동이 게임오브젝트 중심으로 움직이는 거 잖아요 블럭에 밀리면 카메라는 계속 앞으로 가지만 플레이어 오브젝트는 블럭에 막혀서 멈춰있다가 옆이나 뒤에 방향을 틀어 이동하게 되면 게임오브젝트 중심으로 플레이어 오브젝트가 뒤 옆으로 순간이동 하듯이 이동되요 이거 결국 못고쳐서 지금은 다른 플레이어 스크립트로 쓰고 있어요
@nover0428
@nover0428 Жыл бұрын
고칠수 있으면 쓰고 싶은데 고칠방법이 있을까요?
@user-hq7ol2ev1l
@user-hq7ol2ev1l 3 жыл бұрын
혹시 저기에 점프를 추가하려면 어떻게 해야하나요
@wergia
@wergia 3 жыл бұрын
캐릭터 Ridbody에 AddForce로 힘을 가해주시면 됩니다.
@DDoogie
@DDoogie 2 жыл бұрын
transform.forward가 뭔지 모르겠습니다.
@wergia
@wergia 2 жыл бұрын
해당 게임오브젝트의 정면을 의미합니다.
@user-et3hy4ts4x
@user-et3hy4ts4x 3 жыл бұрын
2019.4.16f1 personal은안돼네요
@wergia
@wergia 3 жыл бұрын
어떤 부분에서 안되시나요?
@user-es6mj4bq1o
@user-es6mj4bq1o 3 жыл бұрын
private void Move부분에 에러가 납니다. private void Move() { Vector2 moveInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")); bool isMove = moveInput.magnitude != 0; animator.setBool("isMove", isMove); if(isMove) { Vector3 lookForward = new Vector3(cameraArm.forward.x, 0f, cameraArm.forward.z).normalized; Vector3 lookRight = new Vector3(cameraArm.right.x, 0f, cameraArm.right.z).normalized; Vector3 moveDir = lookForward * moveInput.y + lookRight * moveInput.x; characterBody.forward = lookForward; transform.position += moveDir * Time.deltaTime * 5f; } //Debug.DrawRay(cameraArm.position, new Vector3(cameraArm.forward.x, 0f, cameraArm.forward.z).normalized, Color.red); } 부분에서 animator.setBool("isMove", isMove); 부터 문제가 있는거 같은데 잘 모르겠습니다. 코딩 외에도 에디터 실행하면 따로 조작하지 않고 가만히 있는데도 걷는 애니메이션이랑 서있는 모습이 반복됩니다.
@wergia
@wergia 3 жыл бұрын
스크립트 에디터에서 발생하는 명시적인 에러인가요? 아니면 코드 진행이나 동작이 의도와는 다르게 발생하는 논리적인 에러인가요? 우선 대영님이 옮기신 코드가 완벽하게 복사해서 옮긴 코드라고 가정했을 때, animator.setBool("isMove", isMove); 부분에서 에러가 발생하는 문제는 SetBool 함수 호출시 S가 대문자여야 하는데 소문자로 쓰셔서 그럴 수 있다고 생각됩니다. 실제 코드에서 SetBool로 틀리지 않고 쓰셨다면 그 외의 부분을 봐야겠죠. 애니메이션이 제대로 동작하지 않는다고 하셨으니 애니메이터에 파라미터로 선언된 isMove와 SetBool 함수로 호출하는 "isMove" 사이에 둘 중 하나에 오타가 있지는 않은지, 애니메이터의 트랜지션 세팅이 제대로 되어 있는지 확인해야 할 것 같습니다.
@user-es6mj4bq1o
@user-es6mj4bq1o 3 жыл бұрын
@@wergia SetBool을 잘못 적었네요. 움직이는건 해결 되었습니다. 걸을때 애니메이션도 잘 나오고요. 그런데 서있을때는 아직 걷는 애니메이션이랑 섞여 나옵니다.
@user-es6mj4bq1o
@user-es6mj4bq1o 3 жыл бұрын
Stand에서Run으로가는 연결부분에 Conditions가 설정이 안되있었네요. 애니메이션 부분도 해결했습니다.
@gorani_TV
@gorani_TV 4 жыл бұрын
왐마 마크 3인칭시점 배그시점 가능하네요
@wergia
@wergia 4 жыл бұрын
완전 가능!
@gorani_TV
@gorani_TV 4 жыл бұрын
@@wergia 또 하나의 초신성이 탄생합니다
@wergia
@wergia 4 жыл бұрын
"빛나는 현상이 마치 새로운 별이 태어나는 것처럼 보이기에 신성이라는 명칭이 붙었지만, 실제로는 수명이 다한 별이 폭발하며 엄청난 에너지를 내뿜는 것이다." 빠른 사망각
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
혹시 시점 돌리기를 더 빠르게 만들순 없나요?
@wergia
@wergia 3 жыл бұрын
카메라 회전 속도를 높이는 것 말인가요? public float rotateSensitivity; 같은 값을 만들어서 인스펙터에 공개해준 다음 카메라를 회전하는 값에 곱해주면 속도를 더 빠르게 할 수도 있고 느리게 할 수도 있어요!
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@wergia 코드 어느 부분에 곱하는 코드를 입력하나요?
@wergia
@wergia 3 жыл бұрын
​@@user-ek9dp4fu1s LookAround 함수에서 cameraArm.rotation을 이렇게 바꿔주고 있는데 cameraArm.rotation = Quaternion.Euler(camAngle.x - mouseDelta.y, camAngle.y + mouseDelta.x, camAngle.z); 이거를 cameraArm.rotation = Quaternion.Euler(camAngle.x - mouseDelta.y, camAngle.y + mouseDelta.x * sensitity, camAngle.z); 이렇게 곱해주면 될 겁니다.
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@wergia 이렇게 하니까 해결이 됐어요! 감사합니다!
@racoonto
@racoonto 3 жыл бұрын
@@wergia 베르님! 감사합니다! 저도 이코드 써서 카메라 빨리 돌아가게 해줬는데 양옆으로는 빨라졌는데 위아래로 움직이는게 여전히 느리네요 ㅠ 어디에 값을 더 곱해줘야 될까요?..
@daldalgogi
@daldalgogi 2 жыл бұрын
벽이 있으면 못 가게 하는 법은 없나여?
@wergia
@wergia 2 жыл бұрын
캐릭터에서 목적지 방향으로 레이캐스트를 쏴서 벽이 있으면 움직이지 않는 방법으로 처리하면 될 것 같아요
@daldalgogi
@daldalgogi 2 жыл бұрын
근대 레이캐스트가 뭔가요?
@wergia
@wergia 2 жыл бұрын
@@daldalgogi 일종의 광선을 쏴서 맞은 위치를 찾아내는 유니티 기능입니다
@oaa3383
@oaa3383 3 жыл бұрын
에셋파일에 안들어가요 ㅠ
@oaa3383
@oaa3383 3 жыл бұрын
BoxMan@Attack.FBX 파일을 Assets/BoxMan@Attack.FBX에 복사하지 못했습니다. UnityEditorInternal.InternalEditorUtility:ProjectWindowDrag(HierarchyProperty, Boolean) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
@wergia
@wergia 3 жыл бұрын
음... 유니티 에러인 것 같은데 재실행하거나 프로젝트를 새로 만들어서 해도 같은 문제가 발생하나요?
@user-or5ft7pd7t
@user-or5ft7pd7t 2 жыл бұрын
저는 왜 카메라 회전은 되는대 케릭터 이동이 안 될까요?
@wergia
@wergia 2 жыл бұрын
움직이는 로직 부분 동작을 확인해보세요
@s_u_n_t_v
@s_u_n_t_v Жыл бұрын
이걸 모바일에 적용하면 실행이 안되겠죠?
@user-fr8gz7um2i
@user-fr8gz7um2i 2 жыл бұрын
카메라가 안움직이는데요..ㅋㅋ
@wergia
@wergia 2 жыл бұрын
코드 부분에 문제가 없다면 컴포넌트 연결이 잘 되어 있는지 확인해봐야 해요
@PxxxD-of2ei
@PxxxD-of2ei Ай бұрын
질문이 있습니다 구르기 시스템을 만드는 중인데 구르는 도중에는 플레이어가 다른 방향으로 못 움직이게 하고 싶은데 어떻게 해야할까요?
UI 비법서 - Rect Transform | 유니티
10:30
베르의 게임 개발 유튜브
Рет қаралды 10 М.
[Unity/MiddleClass] Make a function to move the character to the clicked position
13:09
베르의 게임 개발 유튜브
Рет қаралды 14 М.
Best KFC Homemade For My Son #cooking #shorts
00:58
BANKII
Рет қаралды 65 МЛН
Slow motion boy #shorts by Tsuriki Show
00:14
Tsuriki Show
Рет қаралды 9 МЛН
스트리밍 레벨 기능 구현하기 | 유니티
9:15
베르의 게임 개발 유튜브
Рет қаралды 7 М.
유니티 JSON 저장과 불러오기 ! (Save and load tutorial using Unity JSON)
25:30
NK Studio의 유니티 스페셜 테크닉
Рет қаралды 12 М.
Third person Character and Camera Movement 1 Unity C#
16:53
오브젝트 풀링 구현하기 | 유니티
14:50
베르의 게임 개발 유튜브
Рет қаралды 15 М.
로딩 화면 구현하기(로딩 씬 방식) | 유니티
10:12
베르의 게임 개발 유튜브
Рет қаралды 26 М.
Groundbreaking New Solar Energy System - Too Good to be True?
7:07
Sabine Hossenfelder
Рет қаралды 412 М.