분류 전체보기 53

[Retro유니티] LightMap과 Baking

Lighting은 연산비용이 비싸므로, Unity는 Lighting Data Asset을 사용해서 Lighting의 실시간 연산량을 줄인다.Lighting Data Asset에 포함된 주요 데이터 중 하나는 Lightmap이다.Lightmap은 Object가 빛을 받았을 때, 어떻게 보일지를 미리 그려둔 텍스쳐이다.Lighting Data Asset을 생성하는 작업을 Baking 이라고 한다. Baking을 해보자. Baking매번 Scene Load시마다 Bake하면 버벅인다. 끄자. Environment Lighting환경광을 설정하자.환경광은, Scene에서 가장 기본으로 깔리는 빛이며, 모든 Object에 적용된다.모든 방향에서 동일세기로 들어오기 때문에, 그림자 및 명암을 만들지 않는다.환경광 ..

[Retro유니티] ZombieSurvivor - 레벨 아트 사용

목표웨이브형 좀비 탑 다운 슈터게임을 제작하는 것기능일정주기로 좀비가 생성됨.시간이 지날수록 주기당 생성되는 좀비의 수 증가.좀비는 플레이어의 위치를 주기적으로 파악하고 항상 최적경로로 플레이어를 추적함.좀비의 이동속도, 공격력, 체력은 랜덤.좀비의 스펙에 따라 색깔이 점점 붉어짐.플레이어 체력은 플레이어를 따라다니는 원형바로 확인가능.기관총 탄약은 유한하고 체력도 자동회복되지 않음.탄약 및 체력은 아이템으로 회복가능.아이템은 플레이어 근처의 랜덤위치에 주기적으로 생성되며, 일정 시간 뒤에 사라짐.후처리 효과를 사용해 게임화면을 보정함.패키지매니저, 시네머신, 포스트-프로세싱 스택을 사용할 것.  원본 repository의 14를 그대로 가져오면  Assets 폴더- Gizmos: 시네머신용 기즈모 아이..

[Retro유니티] Object Pooling으로 발판생성기 만들기 & 음악넣고 빌드하기

발판을 무한 반복 생성하여 배치하는 발판 생성기를 구현하자.가장 간단한 방법은 매번 새로운 발판을 생성하는 것인데,이 방법은 발판 오브젝트를 kill하지 않기 때문에, 메모리 사용량이 계속 증가하는 문제가 있다.따라서 Object Pooling 방식으로 발판을 생성/관리하도록 하자. Object Pooling은 Object를 미리 만들어서, Pool에 쌓아두는 방식이다. Pool에 Object를 생성해두고, 필요하면 생성 대신, Pool의 Object를 가져다 쓴다.필요 없다면 파괴하는 대신, 비활성화하고 Pool에 반환한다.- Instantiate() 또는 Destroy() 메서드는 오브젝트를 실시간으로 생성/파괴하는데, 성능을 많이 먹으며 GC를 유발하기 쉽다. 이것은 게임 중 Freeze를 겪게 만..

[Retro유니티] 발판 밟을 시 점수+=1 구현

목표- Prefabs를 통한 발판구현- OnEnable() 메서드- 발판Generator 구현- Object Pooling- 미리 생성된 발판 재사용  발판만들기지금은 StartPlatform 게임오브젝트의 발판(시작지점 발판) 뿐이다.발판은 두 종류로 나뉘며, feature도 다르다.1. 시작지점 발판-> 별 기능 없다.2. 그 이후 발판-> 밟을 때마다, Scored를 +=1 한다. Prefabs의 Platrofm을 Hierarchy로 드래그.그 이후,Platform 전체는 Sorting Layer를 Foreground로, 각 Obstacle들은 Middleground로 설정해준다. (Prefab 만드는 법은, Bullet Prefab 생성하는 글을 참고하라) Platform Prefab으로부터 생성..

[Retro유니티] 배경 구현, 배경스크롤링 구현 및 Deadzone 구현

목표- 움직이는 배경 구현- 움직이는 발판 구현- 낙사존 구현 Player 캐릭터는 계속 뛰는 것처럼 보이지만, 실제 X축 위치는 고정시킬 것이다.대신, 배경을 움직이게 만들어서 뛰는것처럼 보이게 만들 것이다. 배경추가- 먼저 게임 배경하늘을 추가하자. Main Camera의 Background 컬러색을 Sky 스프라이트에 어울리게 변경하자. 이 상태로 플레이를 하면, Player랑 Sky Sprite랑 앞뒤 서순이슈로 가려지는 문제가 있다.Player가 항상 Sky보다 앞에 나오게 해야한다.- Sprite Renderer Component가 그리는 Graphic의 앞뒤정렬은, Transform상의 Position과 독립적이다.  - 앞뒤정렬 순서는 Sprite Renderer의 Sorting Layer..

[Retro유니티] 2D 충돌구현 - OnTriggerEnter2D / OnCollisionEnter2D / OnCollisionExit2D 오버라이딩

PlayerController 스크립트- 사용자 입력을 감지하여 Jump- 충돌을 감지하여 장애물에 닿았다면 Die- 상황에 맞는 효과음과 애니메이션 재생  Input.GetMouseButtonDown(0) -> 0은 왼쪽마우스, 1은 오른쪽마우스, 2는 휠클릭이다. Input.GetMouseButtonDown -> 마우스 누르는 순간Input.GetMouseButton ->마우스 누르는 동안Input.GetMouseButtonUp ->마우스 떼는 순간 우리는 Player 게임 오브젝트의 Audio Source Component에 Jump 오디오 클립을 할당했다.따라서 그냥 playerAudio.Play(); 하면, 점프 사운드 재생이 된다.  Die시에는 Die 오디오 클립으로 변경해야한다.player..

[Retro유니티] FSM을 통한 Animator Controller 구현

FSM은 뭐 학부때 당연히 배우는 내용이니 넘어가고.중요한건 유니티에서 어떻게 구현하느냐이다. Animator Controller 란- FSM을 사용해서, 재생할 Animation을 결정하는 State Graph를 표현하는 Asset이다.Animator 란- Animator Controller를 참고하여 Game Object에 Animation을 적용하는 Component이다. Animator Controller는 Asset이고, Animator 는 Component 라는 점에 주의.(게임에서 Animation을 재생하려면, 둘 다 필요하다.) 이전에 Run 애니메이션 클립을 만들 때, Player Animator Controller가 자동생성되었고,또한 Player Game object에 Animato..

[Retro유니티] 2D Collider 및 Animation 추가

Circle Collider 를 추가해서, 원모양 콜라이더를 추가한다.Box대신 Circle을 써야, 각진 모서리에 안착했을 때, 부드럽게 모서리를 타고 올라가게 된다.  오디오 소스를 추가해서, 게임 Object가 소리를 낼 수 있게 하자.   캐릭터의 Sprite 이미지를 사용해 애니메이션을 만들자.   기본이 60fps라 너무 빠르다. 프레임을 낮추자.Sample Rate를 추가한 뒤, Samples를 24fps로 낮춘다. 마찬가지로 Jump, Die 애니메이션 클립을 만들자.Die는 반복재생되면 안된다. Loop Time을 해제하자. Animation 클립 관리를 위해, FSM을 활용한다.다음 공부의 목표는 FSM이다.  배운 것- Circle Collider 를 써야, 각진 모서리에 안착했을 때..

[Retro유니티] 2D 프로젝트 열기

유니티 프로젝트는 2D와 3D가 큰 차이가 없다.자유롭게 변경이 가능할 정도다 2D 프로젝트의 주요 특징은 아래와 같다.1. Sprite Type으로 이미지를 임포트2. 기본생성카메라가 Orthographic 모드를 사용3. Lighting 설정 중 일부가 비활성화된다.4. Scene창이 2D View로 보인다. ----- - 2D 프로젝트에서는, RigidBody2D 같은 2D Component를 사용하게 된다.- 대부분 Vector2로 동작하거나, z축을 무시한 Vector3로 동작한다. https://github.com/IJEMIN/Unity-Programming-Essence/tree/master/11/Uni-Run/Assets에서, Assets를 다운한다.   시작지점만들기   낙사 판정 존 만..

[Retro유니티] GameManager, TextMeshPro & Build

목표- Game Manager와 UI 만들기- Scene관리자로 Scene 로드하기- PlayerPrefs를 사용해 데이터를 저장하기- 게임을 빌드하기 에셋종류별로 폴더를 추가생성하고 정리한다. 바닥회전기능을 구현하여 Level 게임오브젝트에 적용해보자.using System.Collections;using System.Collections.Generic;using UnityEngine;public class Rotator:MonoBehaviour{ public float rotationSpeed = 60.0f; void Update() { // 1초에 y축기준 몇 도 회전할것인지 transform.Rotate(new Vector3(0f, rotationSpeed..