소개
이 글은 경희대학교 게임 실감 콘텐츠 동아리인 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로 설정
anim.SetBool("isJump", true);
anim.SetTrigger("doJump");
anim.SetBool("isJump", false); //바닥에 닿았을떄니까 false
중력 값 편집
편집 > 프로젝트 설정 > 물리

향상된 지형 물리학
하나)

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

즉, 코드에 따라 직접 움직이지 않는 한 움직이지 않습니다.
벽에 강체 추가
삼)

벽의 검사기 창에서

플레이어 회피 구현
닷지 변수 추가, 업데이트에 닷지 변수 추가, 구분자를 별도로 설정
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;
}
끝
지금까지는 플레이어 점프와 회피였습니다. 다음 포스팅은 아이템 제작에 대한 포스팅입니다.