유니티:캐릭터 이동
편집하기
Sam
(
토론
|
기여
)
님의 2021년 8월 10일 (화) 02:41 판
(
→이동
)
(
차이
)
← 이전 판
|
최신판
(
차이
) |
다음 판 →
(
차이
)
둘러보기로 이동
검색으로 이동
경고: 이 문서의 오래된 판을 편집하고 있습니다.
이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
{{유니티}} ==개요== 스크립트를 만든다. public변수로 두면 인스펙터에서 편집할 수 있다.<syntaxhighlight lang="c#"> public class Move : MonoBehaviour{ public float maxSpeed; Rigidbody rigid; void FixedUpdate(){ float h=Input.GetAxisRaw("Horizontal"); rigid.AddForce(벡터, 모드) if(rigid.velocity.x > masSpeed)//우측에 대한 스피드. rigid.velocity=new Vector3(masSpeed, rigid.velocity.y); else if(rigid.velocity.x < masSpeed*(-1))//좌측에 대한 스피드 ... </syntaxhighlight>일반적으로 타이밍이 중요한 단발적인 키 입력은 Update에서 다룬다.(프레임이 더 촘촘해) ===현실적인 움직임.=== rigidbody에서 Linear Drag는 공기저항의 역할을 한다.(접촉하지 않을 때의 저항) <br /> ==이동== === 벡터 === 이동을 구현하기 위해선 Rigidbody의 Velocity에 변화를 주어야 한다. 이는 Vector3 형태이기에 그 형태에 맞는 값을 지정해주어야 한다. === 코드구현 === <syntaxhighlight lang="c#"> public class PalyerMove : MonoBehaviour{ public Rigidbody playerRigidbody; // 플레이어의 물리. public float playerSpeed; // 이동속도. </syntaxhighlight>이동을 구현하기 위해 Rigidbody의 addForce를 사용하거나 Velocity를 사용하는데, addForce는 힘을 가하기 때문에 관성의 영향을 그대로 받고, Velocity는 속력을 즉각 반영한다는 특징이 있다. ===코드구현이 끝난 후=== Rigidbody를 public으로 지정한 경우, 인스펙터 창에 나타난 PlayerRigidbody에 컴포넌트를 드래그&드롭 해주어 물리를 적용한다. ===애니메이션 조작=== 방향에 따라 캐릭터가 바라보는 곳을 바꾸게끔 만들어야 한다. ==점프== 단발적인 조작이기에, Update에 두는 편이 좋다. 아래와 같은 형식으로 코딩한다.<syntaxhighlight lang="c#"> if(Input.GetButtonDown("Jump"))//점프키를 받으면.. rigid.AddForce(벡터.up * jumpPower, 모드) //위에 jumpPower를 미리 정의해주어야 한다. 애니메이션객체.SetBool("애니매개변수값", 변경할값); </syntaxhighlight>점프에 해당하는 애니메이션도 넣어주어야 할 것이다. ===점프의 끝=== 점프가 끝나고 애니메이션을 끝내주고 기본적인 Idle상태로 돌려주어야 한다. 일반적으로 onCollisionOn을 사용하지만, 레이캐스트도 가능하다.<syntaxhighlight lang="c#"> void FixedUpdate() //시작점, 방향, 레이의 색을 정해준다.(없어도 됨. 보기 쉽게 만들어준 것일 뿐) Debug.DrawRay(rigid.position, Vector3.down, new Collor(색값)); //에디터 상에서만 Ray를 그려주는 함수이다. //해당 거리 안에 들어오면 collider에 내용물이 담긴다. RaycastHit rayHit=Physics.Raycast(rigid.position, Vector3.down, 거리, LayerMask.Getmast("Floor")); //그러나, 레이는 한 오브젝트에 맞으면 관통이 안된다. //이 문제를 해결하기 위해 레이어를 이용한다. Floor 등의 이름으로 레이어를 만든다. //마지막 인자는 닿은 레이어를 반환한다는 의미이다. if(rayHit.collider != null){ if(rayHIt.distance <길이f){ 애니메이션객체명.SetBool("애니매개변수", false); //땅에 닿았으니 점프관련 변수를 바꿔준다. } </syntaxhighlight>캐릭터가 아래로 내려올 때에만 레이를 쏘게끔 만들어도 괜찮겠다. if(rigid.velocity.y<0) 등으로. <br /> ===무한 점프 막기=== 점프가 무한정 되는 상황을 막기 위해 다른 처리가 더 필요해진다. 맨 위의 Input 부분에 if의 조건으로 <code>&& !애니객체.GetBool("애니매개변수")</code> 를 넣어주어 점프상태가 아님을 파악하여 점프키를 먹도록 하는 게 좋겠다.
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
이 문서에서 사용한 틀:
틀:유니티
(
편집
)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보