수업 복습

Uni-Run

은꽁이 2023. 8. 15. 15:49

한동안 3D를 하다가 2D로 넘어왔다!(좀비게임 할 줄 알았는데 좀 아쉬웠다..)

이번에 들은 수업은 좀 신기했는데, 스크립트 안에 있는 메소드, 변수명, 변수의 수치 등이 이미 작성된 상태였다는것,,

두둥!

 

처음 수업 들을때도 변수명, 메소드 이름이 내가 지은게 아니라서 헷갈렸다(일단 변수명 , 메소드명이 너무 길었음 우쒸)

그래도 일단 복습을 해 본다!

 

일단 플레이어 애니메이션부터 만들어준다.

Toko_Run이 붙어있는 이미지 집합체라서 먼저 잘라줘야한다.

자를 리소스를 선택하고 인스펙터에 있는 Sprite Mode를 Single → Multiple로 바꿔준 후, Sprite Editor를 눌러준다.

그럼 이렇게 뜨는데, 여기서 Slice → Grid By Cell Count를 누르면 컴퓨터가 셀에 맞게끔 이미지를 잘라준다.

MakeTransition과 Parameters를 애니메이터에서 설정해주고 이제 PlayerController에 코드를 작성해주면 된다.

 

 

캐릭터의 2단점프 코드.

ClimbCloud때 못구현했던게 왜 그랬었는지 알것같다..(내가 너무 단순하게 생각했기 때문!)

Vector2로 초기화하는 이유는 이미 점프를 한번 했을 때 AddForce로 밀어준 상태라서 초기화하지 않고 점프할 경우

AddForce로 두번 밀어주기 때문에 플레이어가 점프하다가 승천해버릴 수도 있다(?)

1, 2단 점프 모두 동일한 힘으로 밀어주기 위함.

 

충돌을 감지하기 위한 코드인데 이해하기 어려우면 외워버려야겠다..

충돌법선이라는 건데 두 물체가 충돌했을 때 직각을 이루는 각도라고 알아두면 된다.

collision.contacts[0]은 충돌한것중에 나와 가장 가까운 것.

normal은 충돌한 방향과 직각을 이루는 각도. *충돌한 물체와의 벡터길이는 무조건 1로 고정된다.

y는 각도를 결정해주는 요소이다.

충돌면(사각형)을 기준으로 저 초록색 선이 그래프(┽)에 있는 y축이라고 생각해보자.

초록색 선에 충돌한 파란색 원의 y값이 0이라고 한다면 빨간색 선에 충돌한 검은색 원은y값이 .7~.8정도 될것이다.

(최대 벡터 길이는 1이기 때문에 1이내 에서만 작용)

collision.contacts[0].normal.y의 값이 클수록 충돌 지점은 사각형의 세로부분이 아닌 가로부분에 가까워 질 것이다.

 

*재정리

법선벡터 : 어느 면에 수직인 벡터

collision : 충돌한것들의 정보

contacts : 닿은 점들의 집합(배열)

[0] : 가장 가까운곳에 닿은 점

normal : normal벡터는 방향을 알려주는 방향벡터이기 때문에 최대길이가 1임

y > .7f : y의 방향벡터가 .7 보다 크다는 얘기는 높이와 밑변이 .7이상의 삼각형으로, 그 삼각형의

벡터(대각선)는 a² + b² = 1(방향벡터의 길이는 1이기 때문)

0.7² = 0.49로 a와 b는 대략 0.7 이상, 0.5가 될 것이다. ( = 각 변의 각도는 45도, 45도, 90도)

즉 45도 이상의 높이에서 밟았을 때에만 밟은것으로 인정하겠다는 뜻

 

 

 

캐릭터가 충돌면을 제대로 밟았다면 isGrounded = true, jumpCount = 0이 될 것이다.

 

다음으로는 플랫폼과 Background를 설정해야 한다.

플랫폼과 Background를 무한반복 시킬것이기 때문에 배경을 복사해주는 코드와 플랫폼+Background를 끊임없이 왼쪽으로 밀어주는 코드를 작성해야 한다.

BackgroundLoop코드에서는 width를 미리 정해주었는데 그 이유는

이미 파일의 MaxSize가 나와있기 때문에 이 파일의 크기를 알기위한 다른 방법을 쓸 이유가 없기 때문이다.

 

StartPlatform과 Background, Player의 작업이 끝났다.

이제 장애물이 있는 MiddlePlatform을 구현해주자.

OnEnable = 컴포넌트가 활성화 될 때마다 매번 실행되는 메소드로

실행 순서는 Awkae > OnEnable > Start > Update이다.

새로운 발판은 풀링기법으로 만든다.

 

이제 게임매니저를 만들었다. 게임매니저에는 여태 쓴적 없던 instance를 생성해 게임매니저를 직접 참조하게 만드는 방식인데, GetComponent, FindObjectofType같은 컴퓨터를 힘들게 하는 코드를 덜 쓰게 위한 코드이다.

if(instance = null)

{

     instance = this;

}

에서 public static GameManager변수인 instance에 자기 자신(GameManager)를 할당 하는것이다.

싱글톤 패턴 알아보는법 : static변수, instnace(표준 변수명으로 사용한다.), instance = null?

 

사용방법 : GameManger.instance.기능

 

게임매니저에 Text추가(TextMeshPro)

폰트를 파일에 들어있던 폰트로 바꿔주자!

TMPro를 쓰게되면 유니티에 ~~~Import(대충 자기네 기본폰트 쓸거냐? 쓸거면 Imprort눌러 라는 뜻)가 뜨는데 Import를 누른 후 진행하면 된다.

Die()메소드는 한번만 실행되기 때문에 애니메이션 또한 한번만 실행되도록 설정한다.

결과물!! 복습 끝!