[클론코딩_골드메탈_3D] 1. 플레이어 이동

2023. 7. 2. 21:56·게임개발/3D_골드메탈_클론코딩

https://www.youtube.com/watch?v=WkMM7Uu2AoA&list=PLO-mt5Iu5TeYkrBzWKuTCl6IUm_bA6BKy&index=1 


1. 준비하기

3D Project생성 후 상단바 Window > Package Manager에서 에셋 패키지를 Improt하기


2. 지형 만들기

3D Object > Cube 로 땅 만들기

●이때 색이 어둡다면 빛이 켜져있는지 확인 Window > Rendering > Lightning 에서 Generate Lightning 클릭

Cube의 Scale을 조절하여 지형 생성

Cube를 생성 후 조절해 벽 4개 생성

오브젝트 복사 : Ctrl + D

 

안쪽 벽을 안보이게 하기 위해 안쪽 벽의 Mesh Renderer 해제

●Mesh Renderer : 눈에 보여지게 하는 렌더러

 

Material 폴더 생성 후 안에 Plane 이름의 Material 생성

Albedo 옆 원을 눌러 텍스쳐 이미지 선택(Tile)

 

●문제 : 타일 하나가 바닥을 다 차지 함

●방법 : Tiling 숫자를 늘려서(10) 텍스쳐를 타일형태로 배치한다.


3. 플레이어 만들기

●프리펩 : 게임 오브젝트를 에셋으로 보관한 형태

플레이어 프리팹을 하이어라이키로 드래그

 

●플레이어에게 필요한 컴포넌트 : Collider + Rigidbody + Script

Rigidbody 추가

 

Capsule Collider 추가

Capsule Collder의 Center값 조절

●이떄 마우스를 가져다 대고 누른채로 드래그로 수치를 조절할 수 있다.

 

Script 폴더 생성 후 Player이름의 Script 생성


4. 기본 이동 구현

◆Input Axis 값을 받을 전역변수 선언

public class Player : MonoBehaviour
{
    public float speed;
    float hAxis;
    float vAxis;
}

●speed는 유니티에서 조절을 위해 public 선언

●비 선언시 private

 

◆키보드 마우스 입력을 확인

    void Update()
    {
        hAxis = Input.GetAxisRaw("Horizontal");
        vAxis = Input.GetAxisRaw("Vertical");

        moveVec = new Vector3(hAxis, 0, vAxis).normalized;

        transform.position += moveVec * speed * Time.deltaTime;


    }

●GetAxisRaw : Axis 값을 정수로 반환하는 함수

●Horizontal과 Vertical은 Edit > Project Setings > Input Manager에 정의되어 있다.

●normalized : 방향 값이 1로 보정된 벡터 (대각선 이동 속도 균일화)

●transform 이동은 꼭 Time.deltaTime을 곱할것

 

관성에 의한 쓰러짐은 Rigidbody Freeze Rotation (x,z)으로 해결

 

Transform 이동은 물리 충돌을 무시하는 경우가 발생

▷FixedUpdate와 Udate의 프레임이 다른데

▷충돌 판정은 FixedUpdate에서 실행되고 플레이어는 Udate기준으로 이동한다.

▷따라서 Rigidbody의 Collision Detection을 Continuous로 변경 해주어 해결한다.

▷▷CPU 성능을 써서 활발한 물리적 충돌 감지를 늘려준다는데... 잘 모르겠다... 나는 여전히 뚫고 지나간다.


5. 애니메이션

애니메이션 폴더 생성 후 Animator Controller, Player 생성

Player의 자식 Mesh Object에 Animator을 할당합니다.

Models 폴더에 Player.FBX 에서 Idle, Run, Walk 드래그 드랍

▷.FBX : 각종 정보들이 구분되어 저장되는 3D 포맷

MakeTransition 쌍방향 연결

bool 타입 Prameter, isRun, isWalk 생성

파라메터를 Condition에 사용하여 Transition완성하기

(Exit TIme 체크해제, Transition Duration 0.1 설정)

(파라미터는 각 상황에 맞게 설정)

 

◆스크립트에 애니메이션 설정

public class Player : MonoBehaviour
{
	...
    Animator anim;
    void Awake()
    {
        anim = GetComponentInChildren<Animator>();

    }

    void FixedUpdate()
    {
		...
        anim.SetBool("isRun", moveVec != Vector3.zero)
		...
    }
}

●GetComponentInChilder<Animator>() : 자식에서 <Animator>를 할당.

●SetBool("변수",값) : 애니메이션 파라메터 값 설정

 

◆Shift를 눌렀을 때를 구현

▷Input Manager에서 사이즈를 늘리고 늘어난 항목을 Name : Walk , Positive Button : left shift 로 설정 Alt positive 삭제

public class Player : MonoBehaviour
{
	...
    bool wDown;
	...
    void FixedUpdate()
    {
	...
        moveVec = new Vector3(hAxis, 0, vAxis).normalized;

        transform.position += moveVec * speed * (wDown ? 0.3f : 1f) * Time.deltaTime;

        anim.SetBool("isRun", moveVec != Vector3.zero);
        anim.SetBool("isWalk", wDown);
	...

    }
}

●삼항연산자 : 조건문 ? (true일 때 값) : (false일 때 값)

 


6. 기본 회전 구현

public class Player : MonoBehaviour
{
    void FixedUpdate()
    {
	...
        transform.LookAt(transform.position + moveVec);
	...
    }
}

●LookAt : 지정된 벡터를 향해서 회전시켜주는 함수 (Transform, Vector3 사용 가능)


7. 카메라 이동

쿼터뷰 느낌이 나도록 마케라 위치, 회전 변경

◆카메라 이동을 위한 스크립트 Follow 생성

=public class Follow : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;

    void Update()
    {
        transform.position = target.position + offset;
    }
}

●따라갈 목표와 위치 오프셋을 public 변수로 선언

●target에 Player 드래그 드랍, 유니티에서 offset 설정


8. 느낌 살리기

Create Empty > WorldSpace 안에 바닥과 벾을 자식으로 넣고 45도 회전

원하는 벽과 오프셋 설정


깃허브 올리기

Commit : ver 1.15
Description : Sound System

https://github.com/mekain80/CloneCode_GoldMetal3D

 

GitHub - mekain80/CloneCode_GoldMetal3D

Contribute to mekain80/CloneCode_GoldMetal3D development by creating an account on GitHub.

github.com

 

'게임개발 > 3D_골드메탈_클론코딩' 카테고리의 다른 글

[클론코딩_골드메탈_3D] 5. 아이템 먹기 & 공전물체 만들기  (0) 2023.07.15
[클론코딩_골드메탈_3D] 4. 드랍 무기 입수와 교체  (0) 2023.07.07
[클론코딩_골드메탈_3D] 3. 아이템 만들기  (0) 2023.07.07
[클론코딩_골드메탈_3D] 2. 플레이어 점프와 회피  (0) 2023.07.07
'게임개발/3D_골드메탈_클론코딩' 카테고리의 다른 글
  • [클론코딩_골드메탈_3D] 5. 아이템 먹기 & 공전물체 만들기
  • [클론코딩_골드메탈_3D] 4. 드랍 무기 입수와 교체
  • [클론코딩_골드메탈_3D] 3. 아이템 만들기
  • [클론코딩_골드메탈_3D] 2. 플레이어 점프와 회피
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[클론코딩_골드메탈_3D] 1. 플레이어 이동
상단으로

티스토리툴바