- Today
- Total
목록분류 전체보기 (360)
프로그래밍 농장
게임 개발을 시작할때 어떠한 요소를 추가해야 할지, 개발을 어디서 시작해야할지, 우선순위는 무엇인지, 언제 완성했다고 해야할지, 이런 총괄적인 부분에 대해서 'Onion Design' 으로 귀결시켜서 우선순위를 정하면 편하다. 양파 디자인은 말 그대로 여러 Layer로 구성된 양파처럼 본인이 정한 중요도(우선순위)에 따라 프로젝트를 진행하는 방식이다. 본인도 게임개발을 하는 과정에서 중간중간 다양한 기능들을 추가하고자 하는 과정을 거치다보면 결과적으로는 게임의 완성도가 떨어지는 경우가 많았다. 단적인 예로 최근 Visual Scripting 기반의 간단한 토이프로젝트를 만들었는데, 이때 발사체의 궤적을 화면상에 띄워주는 기능을 구현하기 위해서, Line Renderer를 통한 기능구현을 진행하였다. 이때..
유니티 교육과정에 있어 먼저 진행해야할 프로젝트가 있어 잠시 보류했었다. 보류 전 정리해두었던 부분인 Player / Enemy 전반에 대한 IDamageble 인터페이스 구현을 통한 데미지 처리방식 개편을 우선적으로 진행하였다. 8일차 추가사항 - IDamageble 인터페이스 구현을 통한 Damage 처리방식 개편 - Enemy 추가 및 활동범위 및 스캔/공격 - DollyTrack / Cart 를 이용한 게임 플레이 전 맵을 보여주는 시네마틱을 연출하였다. 개발 노트 ( 진행사항 ) 08/30 (화) 프로젝트 시작 Map / Turret / Player Asset 다운 플레이어 이동구현 터렛 범위 내 접근시 조준 및 발사 기능구현 ( Raycast ) ->error :최초 RayCast 발사시 플레..
Package Manager에서 Cinemachine 및 sample Scene까지 다운받고 아래와 같이 씬을 열어 플레이해준다. (2D) 플레이어를 이동시켜보며 시네머신 카메라가 어떤식으로 동작하는지 확인해본다. 그렇다면 이번에는 시네머신 카메라를 삭제하고 직접 생성해서 구현해보도록하겠다. 아래와 같이 시네머신 카메라를 새로 생성해준 후, 인스펙터상의 Follow를 캐릭터에 맞추어 준 후 플레이해보면, 시네머신 카메라가 자동으로 캐릭터를 따라다니며 비추게 된다. 카메라의 orthograph 사이즈 설정도 가능하다. 그 외 인스펙터에서 dutch angle 등 카메라에 대한 다양한 설정이 가능하다. 또한 아래와 같이 Body 인스펙터에서 카메라가 비출 중심점을 지정해줄수도있다. 아래와 같이 임의로 y축을..
아래와 같이 특정 Key입력을 받게되면 조준점(Aim) 기능이 활성화 되는 방식이다. 일단은 Aim을 수행할 VirtualCamera를 생성해주고, 기본적으로 플레이어를 비추어주는 카메라인 3rdPersonControl을 Follow하여 따라다니고, 조준시야에 맞게 위치를 잡아놓아준다. 현재 시네머신은 하위에 Canvas/Aim(이미지)를 생성해놓고 조준 키 입력을 받을시, 해당 이미지를 활성화 해주며 카메라 전환을 해주는 방식이다. 아래는 3rd Person Aim (에임)할 카메라에 붙는 스크립트이다. Key입력을 받는것에 따라 카메라의 우선순위(Priority)를 조절해주는 방식으로 구현해주면된다. using UnityEngine; public class ActivateOnKeypress : Mon..
아래와 같이 시네머신 카메라를 사용하게 되면, 사용자가 벽에 부딪히거나 할시, 카메라가 벽 뒤를 비추는 현상이 발생한다. 이때 Inspector의 Extension -> CinemachineCollider를 적용하게되면 벽에 부딪혀 뚫리는 형상이 발생하지 않는다. 해당 원리는 아래와 같이 벽에 부딪힐시, 시네머신 카메라가 교체되는 원리로 구현되는 것이다.
Base 란, 기본적으로 해당 키워드를 사용하는 클래스의 부모 클래스를 가리키는 것이다. 아래와 같은 코드가 있다고 가정해보자 . class Fruit { string g_name; int g_grade; int g_price; public Fruit(string name, int grade, int price) { g_name = name; g_grade = grade; g_price = price; } public void Sell() { Console.WriteLine("과일 {0}을(를) {1}원에 팔았습니다.", g_name, g_price); } public void Info() { Console.WriteLine("과일 이름: {0}", g_name); Console.WriteLine("과일..