- Today
- Total
프로그래밍 농장
유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 8주차 학습 일지 본문
유데미 스타터스 과정이 벌써 8주차이다. 이번주에는 기록적인 폭우와 침수가 있었지만 이들을 뚫고 이번주도 스타터스에서 열공하였다 :)
지난주에는 유니티에서의 스크립팅 개념과 다양한 구현방식 ( 싱글톤 패턴, 옵저버 패턴, Monobehavior LifeCycle. . ) 들과 유니티 엔진상에서 구현가능한 다양한 이펙트와 파티클, 랜더링에 대하여 직접 구현해보는 시간을 가졌다.
이번주에는 강사님께서 직접 구현가능한 2D와 3D 프로젝트를 하나씩 투표를 받아서 직접 구현해보고 구현방식에 대한 개념을 익히는 시간을 가졌다.
2D - Dodge 형식의 미니게임 ( ex. 뱀파이어 서바이벌 . . )
3D - LBS 기반 미니게임 ( ex. 포켓몬고 . . )
위 두가지를 만들어 보았다.
- 유니티 파티클 & 애니메이션 과제 (전주차)
우선 전주차 과제였던 유니티 파티클과 애니메이션을 활용한 프로젝트를 리뷰하면서 포스팅을 시작하고자 한다.
아래 3가지 조건과 최종 구현모습이 주어졌다.
- 아래의 체크된 옵션을 사용하여 영상의 모습을 구현해주세요.
- 애니메이터를 이용하여 이동 / 스케일 변화를 구현해주세요.
- 파티클 텍스쳐는 기본 파티클 텍스쳐를 사용하시면 됩니다
우선 해당조건과 결과물이 출력되도록 하기위한 빈 GameObject를 하나 생성해준후, Particle System을 붙혀주었다. 저번주에 배웠듯이, 기본 파티클시스템을 붙히게 되면 Sphere형태로 퍼져나가는것이 기본이다.
위 결과물은 Rotation 카메라 정면시점기준으로 아래 -> 위로 생성되는 구조이기때문에 Rotation.x 를 Inspecter에서 -90으로 설정해주었다.
그 후 파티클이 생성될 Shape은 보이듯이 Cone으로 해주었고, 파티클이 촘촘히 생성되야하므로, emission-Rate over Time을 1000, 그리고 Color of Lifetime에서 생성되는 각 파티클의 시간대 별로 위와 같이 색상을 바꾸도록 하였다.
그 외 Radius와 Arc등의 설정을 조작해주었으나, 위 결과물처럼 위쪽으로 퍼져솟아있는 버섯모양이 아닌, 아래를 향하는 모습이 해결되지 않았다. 이는 Velocity of Lifetime에서 생성지의 중심기점으로 설정되는 Linear와 Orbital을 건드려주니 정상적으로 동작하였다.
- 미니게임 2D: Dodge
위에서 말했듯이 2D 게임에서는 조이스틱으로 조작하여 날아오는 방해물들을 피하며 플레이하는 방식의 Dodge류의 게임을 간단히 제작해보았다.
일단 기본적으로 조이스틱을 구현하는 것이 가장 주요한 구현 목적이었다.
문득 궁금증이 생겨 검색해보니 게임개발시 조이스틱은 에셋으로도 많이 구현되어있어, 가져다 쓴다고는 하지만 기본적인 동작개념에 대해서는 당연히 이해하고 구현할줄 알아야 한다고 생각했다.
조이스틱의 경우, 기본적으로 EventSystem ( : 사용자의 입력에 따라 응용 프로그램의 오브젝트에 이벤트를 보내는 방법 ) 에 기반하여 사용되며, 각 기능에 해당되는 내장함수를 작성하고 사용하는 방식이다.
위와 같은 이벤트의 최대 장점은 지역변수로 가져오는 PointerEvenetData eventData이다.
해당 클래스는 상당히 많은 정보를 담고있고, 해당하는 정보들은 위 이벤트에서만 얻어낸 값을 가지게 된다. 아래는 그중 가장 많이 사용되는 변수들이다.
ClickCount : 클릭된 횟수
ClickTime : 클릭된 시간
delta : 변화한 값
pointerId : 포인터 ID
position : 현재 포인터 위치
+ 더 많은 변수는 아래 Unity Docs 참조
해당 닷지 미니게임에서의 조이스틱은 OnDrag(), OnEndDrag() 를 기반으로 터치(마우스)에 따라 해당 함수들을 사용하여 조작하도록 하였다.
전체코드 중 일부 : OnDrag()
public void OnDrag(PointerEventData eventData)
{
PointPosition =
new Vector2(
(eventData.position.x - Background.rect.center.x) /
((Background.rect.size.x - Handle.rect.size.x) / 2),
(eventData.position.y - Background.rect.center.y) /
((Background.rect.size.y - Handle.rect.size.y) / 2));
PointPosition = (PointPosition.magnitude > 1.0f) ? PointPosition.normalized : PointPosition;
// PointPosition Input.GetAxis 같은 효과를 내기 위해서 왼쪽 -1 ~ 1 오른쪽 Range = 2
// 위쪽 -500 500 아래쪽
// Handle --> Background 안에서 500,500
Handle.anchoredPosition = new Vector2(PointPosition.x * Background.rect.size.x / 2 * offset,
PointPosition.y * Background.rect.size.y / 2 * offset);
// PointPosition =
// new Vector2(
// eventData.position --> 좌하단 (0,0) / 우상단 (1200, 1920)
// overlay --> UI오브젝트들의 포지션 == 트랜스폼 포지션 (0,0)
// Canvas Render Mode ==> Camera Overlay (camera.x, camera.y)
// (0~1200) - BackGround Pos ( 0 + CameraPos)
// (eventData.position.x - Background.position.x) / ((Background.rect.size.x - Handle.rect.size.x) / 2),
// (eventData.position.y - Background.position.y) / ((Background.rect.size.y - Handle.rect.size.y) / 2));
// PointPosition = (PointPosition.magnitude > 1.0f) ? PointPosition.normalized : PointPosition;
// Handle.transform.position = new Vector2(
// (PointPosition.x * ((Background.rect.size.x - Handle.rect.size.x) / 2) * offset) + Background.position.x,
// (PointPosition.y * ((Background.rect.size.y - Handle.rect.size.y) / 2) * offset) + Background.position.y);
}
- 미니게임 3D: LBS
3D 게임은 LBS (위치기반) 프로젝트를 구현하였다.
이번 유니티 프로젝트에서는 MapBox 오브젝트의 Inspecter에서 Location의 좌표점과 그 외 Terrain 등의 설정값을 주어 LBS 게임의 기반을 구축하도록 하였다.
아래와 같은 결과물이 출력되며, 해당 Map 좌표는 Location Log File 이라는 TextAsset 타입의 값을 좌표값으로 할당받아 적용시켰다.
+
추가적으로 이미 빌드된 파일의 dll 파일을 디컴파일하는과정을 통하여 구현 코드내용을 뜯어볼수도있는 AssetRipper에 대해서도 알아보았다.
(물론 대형게임사 등은 해당 데이터파일을 뜯어볼수 없게 난독화 한다)
https://github.com/AssetRipper/AssetRipper
-> 유니티는 asset bundle이라는 개념을 쓴다.
아래와 같이 에셋리퍼를 통하여 유니티로 구현된 하스스톤의 내부 구현내용과 파일들도 확인할수있다.
다른 OS에서 작성된 프로젝트를 임포트할때 줄바꿈 정규화 수정에 관한 이슈가 뜰수있다.
이는 캐리지 리턴 라인피드 ( LF) 에 관한 부분을 참조하면된다.
유데미코리아 바로가기 : https://bit.ly/3b8JGeD
본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.
#유데미, #유데미부트캠프, #취업부트캠프, #개발자부트캠프, #IT부트캠프, #부트캠프후기
'STARTERS' 카테고리의 다른 글
유데미 스타터스 유니티 1기 취업 부트캠프 - 10주차 학습 일지 (0) | 2022.08.28 |
---|---|
유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 9주차 학습 일지 (0) | 2022.08.21 |
유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 7주차 학습 일지 (0) | 2022.08.07 |
유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 6주차 학습 일지 (0) | 2022.07.31 |
유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 5주차 학습 일지 (0) | 2022.07.24 |