게임 개발기/Gravity War

[Gravity War] 기초 작업

bokob 2024. 11. 26. 01:06

 

어렸을 때 재밌게 했던 중력 전쟁이라는 플래시 게임을 3D화 하려고 한다(철자만 다르게 ㅋㅋ).

추가로 멀티 기능도 계획 중에 있다.

 

핵심 아이디어

1. 영역 안에 들어오게 되면 행성의 중력을 받도록 관리 (영역들은 List로 관리 중), 영역 벗어나면 리스트에서 삭제

2. 여러 공간에 중첩되어 있다면 가장 우선순위가 높은 행성의 중력을 받도록 함

3. 캐릭터의 각도를 구체에서는 그에 맞게 회전해주고 평면에서는 평면에 맞게 올곧게 서 있도록 함

 

문제

  • 마우스 방향대로 움직이게 하려했지만, 구체 모양의 지면에서는 회전이 꼬이는 문제가 발생

Quaternion.LookRotation()을 이용해 바라보는 해당 벡터로 바라보게 하려고 했지만 구체 형태에서의 회전과 같이 꼬여서 제대로 이루어지지 않은 것 같다.

Input과 Quaternion에 대한 이해가 부족한 채로 시작해서 생긴 문제다.

구체의 절반 정도에서 움직임이 이상해져서 카메라 방향이 아닌 캐릭터의 방향에 따라 움직이게 바꾸었다.

결국 다음과 같은 형태의 코드로 일단 만들어 두었다.

void Move()
{
    // 캐릭터 회전축 표시 (디버깅)
    Debug.DrawRay(transform.position, -_applyGravity.GravityDirection * 5f, Color.blue);

    _anim.SetBool("IsMove", moveInput != Vector3.zero);
    if (moveInput == Vector3.zero) return;

    // 이동 방향
    Vector3 moveDirection = (transform.forward * moveInput.z);

    // 이동
    _rb.MovePosition(_rb.position + moveDirection * _moveSpeed * Time.fixedDeltaTime);

    Quaternion rightDirection = Quaternion.Euler(0f, moveInput.x * (_rotationSpeed * Time.fixedDeltaTime), 0f);
    Quaternion newRotation = Quaternion.Slerp(_rb.rotation, _rb.rotation * rightDirection, Time.fixedDeltaTime * 3f); ;
    _rb.MoveRotation(newRotation);
}

 

 

 

잡담)

이런 저런 일이 많아서 개발이랑 블로그 관리도 잘 안되는 것 같다.

또 시험기간이어서 잠시 또 개발을 중단해야할 것 같다.

'게임 개발기 > Gravity War' 카테고리의 다른 글

[Gravity War] 중력 방식 변경  (0) 2024.12.29