Game Development, 게임개발/Unity

프로젝트 -3[Unity]

게임이 더 좋아 2021. 10. 30. 00:11
반응형
728x170

github.com/powerpower2005/MiniProject/tree/master

 

 

이 프로젝트로 얻고자하는 바

 

  • 사용자 입력을 스크린에서 처리
  • 기본적인 Physics + 부드럽게 움직이게하기(ex.Lerp)
  • 배경효과 Parallax
  • 적들의 움직임 구현
  • 각 영역 히트효과
  • 쉴드 기능
  • 아이템 랜덤드랍

 

 


 

게임목표

 

wasd로 움직이며
space로 발사한다.

우주선과의 싸움에서 이겨 아이템을 먹으며 강해지자.

 

 

 

 

 

 

 

 

 


 

작업 내역 및 구현한 부분

 


Hero

Input을 GetAxisRaw가 아니라 연속적으로 받는다.
이 값을 Rotation에 이용함
-> 2D로 보이는 게임이면서도 애니메이션 없이 이동하는 모션을 만듬 (z축 이용 3D)



///////////////////////////////////////


Shield

Texture를 이용하여 Shader 구성
-> Offset을 조정할 수 있게 하여 다른 효과도 줄 수 있음

Z축으로 시간에 따라 회전하게 만듬
->  Animation 없이 효과를 줌.

적과 부딪히면 Shield level이 깎이며 쉴드가 남아있는 경우는 파괴되지 않음
Shield가 사라지고 적과 부딪히면 플레이어는 파괴됨



////////////////////////////////////////////



Boundary 설정

Radius라는 offset을 이용해서

실제 경계에 닿지 않더라도 경계 안에서 또는 경계 밖에서 경계에 닿았다고 판단 가능

-> 예를 들어 자연스러움을 위해서 적 비행기는 사용자 화면 밖에 나갔을 때 터지는 것이 좋다


카메라의 Height와 Width를 이용하여 경계값 받아옴(런타임 중 할당)
-> 해당 값을 경계로 이용


해당 오브젝트가 어느 위치로 나갔는지 확인이 가능

offRight, offLeft, offDown, offUp



/////////////////////////////////


Enemy

Random으로 소환됨,Delay, padding을 가지고 있음
-> 동시에 여러 개나 같은 위치에 소환되는 일을 막음
-> spawn은 다른 스크립트에서 설정

Boundary 체크를 해서 벗어나면 오브젝트 파괴



피격 시 깜빡임 구현
-> Render에서 Material을 받아서 색을 바꿈으로써 구현




//////////////////////////////



ProjectSetting - Physics
레이어로 충돌을 관리한다.



////////////////////////////////

Projectile

3D게임에서 2D를 구현하고 싶다면 z축을 항상 잘 신경써줘야 한다.
때문에 이 투사체의 collider 또한 z축으로 충분한 scale을 주었다.
또한 Layer로 Physics를 관리하기 때문에 layer도 신경써주어야 한다.
Projectile또한 화면 밖으로나가면 파괴된다.


///////////


다른 Enemy들은 기존의 Enemy를 inherit 받아서 만듬

0. 직진형
1. 좌우 진동형 (사인파)
2. 좌->우, 우->좌 직선보간법 이동형 point 2개 이용(랜덤)
3. V자 커브 직선 보간법 이동형 point 3개이용(랜덤)


4.보스형태와 비슷하게 구현함
-> Part별로 데미지 들어가게함
순서대로 데미지를 받음. 



////////////////////////


Weapon
클래스로 만들어서 관리함
WeaponType을 Enum으로 선언하여 변수 값을 할당함.

WeaponType을 Key로하는 Dictionary를 생성하여 해당되는 무기들 값을 넣어놓음
-> 해당 무기를 Type으로 받아서 쓰기 위함

Projectile의 값을 WeaponType에서 받아와서 설정을 바꿈.








///////////


PowerUp
3D text + cube로 구현

움직임
-> Random으로 x,y 속도를 받아서 이동
-> Random으로 Rotation 받아서 회전(글자는 회전 X)

LifeTime, FadeTime 설정
-> LifeTime + FadeTime 동안 움직임
-> FadeTime에 진입하면 시간에 따라 투명해짐
-> color.alpha를 이용해서 0~1 값을 줌

화면 벗어나면 사라짐

PowerUp 마다 WeaponType이 있어서 해당 능력을 향상시킬 것임.
**WeaponType이 틀리면 능력 초기화후 시작.
-> B 5단계에서 S먹으면 S 1단계.



여기서 Hero의 무기를 초기화하는 과정에서
Race Condition이 나타남. 둘다 Awake()에 있는 코드
-> 생성되기 전에 호출하는 상황 발생. (nullReferenceError)

-> Awake() Start() 바꾸고 Project Script Order 조정함.



Enemy에서 Drop 하기로 함


//////////////////////


배경화면 
Parallax

배경화면은 고정된 채로
2가지의 다른 평면을 만들어 움직여서 원근감 구현
플레이어의 움직임에 따라 움직임도 달라짐.



 


 

이슈발생 또는 반성할 점

 

  • 이러한 게임또한 스테이지 구성이 핵심이라는 것을 깨달았다.
  • 사운드와 같은 여러가지 게임 구성요소가 빠져서 몰입하기 어려웠다.
  • 스토어의 리소스를 많이 가져다쓰는 작업에 시간이 은근히 많이 걸렸다.

 


 

느낀 점

 

이전 버전과 마찬가지로

구현이 어려운 것이 아니라 스테이지 구성 자체가 어려웠다.

하지만 탄막 슈팅게임 특성상 다양한 무기가 있으므로 업데이트할 만한 가치가 충분히 있다.

유도탄 아니면 다양한 패턴의 공격 등을 수학적으로 구현하는 것이 좋을 듯 하다.

이 게임의 보스 패턴이나 무기의 종류일 것이라 생각한다.

유저에게 아슬아슬하게 살아나는 쫄깃함을 줘야하기에 실제 보이는 비행기보다 collider를 작게 만들어야할 것 같다.

또한 나는 유도탄 같은 것에 정말 재미를 느꼈는데 메탈슬러그의 Enemy Chaser라는 [C]라는 아이템을 가장 좋아했다.

구현하기 위해 해당 총알의 방향벡터와 적 위치의 방향벡터를 이용하여 Addforce로 이용하면 될 것 같다.

보스 패턴은 수학을 잘해야할 것 같다.. 피하게 쏴야하니.. 삼각함수 잘쓰면될 것 같다..

 

반응형
그리드형