유니티:캐릭터 이동
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
스크립트를 만든다.
public변수로 두면 인스펙터에서 편집할 수 있다.
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))//좌측에 대한 스피드
...
일반적으로 타이밍이 중요한 단발적인 키 입력은 Update에서 다룬다.(프레임이 더 촘촘해)
현실적인 움직임.
rigidbody에서 Linear Drag는 공기저항의 역할을 한다.(접촉하지 않을 때의 저항)
애니메이션 조작
방향에 따라 캐릭터가 바라보는 곳을 바꾸게끔 만들어야 한다.
점프
단발적인 조작이기에, Update에 두는 편이 좋다. 아래와 같은 형식으로 코딩한다.
if(Input.GetButtonDown("Jump"))//점프키를 받으면..
rigid.AddForce(벡터.up * jumpPower, 모드) //위에 jumpPower를 미리 정의해주어야 한다.
애니메이션객체.SetBool("애니매개변수값", 변경할값);
점프에 해당하는 애니메이션도 넣어주어야 할 것이다.
점프의 끝
점프가 끝나고 애니메이션을 끝내주고 기본적인 Idle상태로 돌려주어야 한다. 일반적으로 onCollisionOn을 사용하지만, 레이캐스트도 가능하다.
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); //땅에 닿았으니 점프관련 변수를 바꿔준다.
}
캐릭터가 아래로 내려올 때에만 레이를 쏘게끔 만들어도 괜찮겠다. if(rigid.velocity.y<0) 등으로.
무한 점프 막기
점프가 무한정 되는 상황을 막기 위해 다른 처리가 더 필요해진다.
맨 위의 Input 부분에 if의 조건으로 && !애니객체.GetBool("애니매개변수")
를 넣어주어 점프상태가 아님을 파악하여 점프키를 먹도록 하는 게 좋겠다.