(Unity3D) 플레이어 점프 및 회피

소개

이 글은 경희대학교 게임 실감 콘텐츠 동아리인 Ludens의 2023 Winter Unity 연구를 통해 알게 된 내용입니다.

코드 정리

업데이트 문에 코드를 계속 추가하면 나중에 혼란스러울 수 있으므로 각 역할에 대한 기능을 바인딩하십시오.

void Update()
{
    GetInput();
    Move();
    Turn();
}

void GetInput()
{

}

void Move()
{
	
}

void Turn()
{
	
}

플레이어 점프 구현

물리 효과를 위한 rigidbody 변수 선언 후 초기화

Rigidbody rigid;

	rigid = GetComponent<Rigidbody>();

bool 변수 선언 후 GetButtonDown()으로 점프 입력 받기

jDown = Input.GetButtonDown("Jump");

void Jump()
{
	if (jDown) {
    	rigid.AddForce(Vector3.up * 15, ForceMode.Impulse)
    }
}

AddForce() 함수로 물리적 힘 적용

즉각적인 힘이 필요하므로 ForceMode.Impulse를 사용하십시오.

하지만 여기에는 제한이 없기 때문에 무한정 점프한다.

b 부울 isJump; 점프 여부를 구별하기 위해

bool isJump;

if (jDown && !isJump) {
	isJump = true;
}

또한 점프 후 False로 돌아가도록 설정(땅에 닿았다고 가정)

ㄴ OnCollisionEnter() 이벤트 기능으로 착지 구현

  • 바닥에서만 작동하도록 태그 사용
void OnCollisionEnter(Collision collision)
{
	if(collision.gameObject.tag == "Floor") {
    	isJump = false;
    }
}


태그가 생성되지 않았으므로 지상 객체의 새로운 태그를 추가하여 지정합니다.

애니메이션 설정


일회성 애니메이션이므로 트리거 매개변수를 매개변수로 사용합니다.


점프는 착지한 것으로 인식해야 하므로 isJump를 추가합니다.

점프 -> 착지에서 갈 때 조건을 isJump로 설정

anim.SetBool("isJump", true);
anim.SetTrigger("doJump");

anim.SetBool("isJump", false); //바닥에 닿았을떄니까 false

중력 값 편집

편집 > 프로젝트 설정 > 물리


향상된 지형 물리학

하나)


영역을 정적으로 만드는 정적 클릭

플레이어 충돌 감지 > 지속이 효과적이려면 충돌하는 상대가 정적이어야 합니다.

2)


중력 > 끄기, 운동학 > 켜기

즉, 코드에 따라 직접 움직이지 않는 한 움직이지 않습니다.

벽에 강체 추가

삼)


매끄러운 벽을 만들려면

벽의 검사기 창에서


상위 3개 변경 > 0, 마찰 결합 > 최소

플레이어 회피 구현

닷지 변수 추가, 업데이트에 닷지 변수 추가, 구분자를 별도로 설정

bool isDodge;

void Dodge()
{
	if (jDown && !isJump) {
    	speed *= 2; //회피는 이동속도만 2배로 상승하도록
		anim.SetTrigger("doDodge");
        isDodge = true;
    }
}

시차를 지정하여 isDodge를 False로 설정

void DodgeOut()
{
	speed *= 0.5f;
    isDodge = false;
}

Dodge 함수에 DodgeOut()을 직접 추가하면 바로 실행됩니다.

  • Invoke() 함수로 시차 함수 호출
Invoke("Dodgeout", 0.5f);

점프와 회피로 분해하는 조건으로 움직임 추가

void Jump()
{
	if (jDown && moveVec ==  Vector3.zero && !isJump && !isDodge)
}

void Jump()
{
	if (jDown && moveVec !=  Vector3.zero && !isJump && !isDodge)
}

움직이지 않을 때는 점프, 움직이면 회피

  • 애니메이션이 마음에 들지 않을 때 “닷지” 속도 증가


Dodge Direction Vector3를 추가하여 Dodge 중 방향 변경을 방지합니다.

Vector3 dodgeVec;

void Move()
{
    //회피 중에는 움직임 벡터 -> 회피방향 벡터로 바뀌도록 구현
    if (isDodge)
    	moveVec = dodgeVec;
}

void Dodge()
{
	dodgeVec = moveVec;
}

지금까지는 플레이어 점프와 회피였습니다. 다음 포스팅은 아이템 제작에 대한 포스팅입니다.