Portfolio

취직으로 작업을 잠정 중단합니다.
구현한 내용 자동 이동 부문 개선 주시대상 체력바 추가 무기 교체 기능 캐릭터의 공격 행동 추가 다음 목표 행동트리로 적 유닛의 이동 및 공격 구현 개선사항 주시 UI를 개선 카메라의 위치가 캐릭터를 바라볼수 있도록 수정 공격이 여러번 할 수 없도록 수정
실제로 플레이상에 변화는 없지만 코드 구조적으로 조정을 많이 했다. UI 변경을 플레이어 컨트롤러에서 수행하는건 알맞지 않기에 MVVM 패턴을 참고해서 만들었다. public class GameUIManager : MonoBehaviour { // 포커스 될때 호출할 이벤트 public UnityEvent TargetFocusEvent; } public class FocusUI : MonoBehaviour { [SerializeField] Image _focusMarkUI; // 포커스 체크 이미지 [SerializeField] TextMeshProUGUI _focusTargetNameTxt; // 포커스 된 대상의 이름 텍스트 IFocusTarget _currentFocus; private void S..
대상을 포커스하는 기능을 만들었다 .포커스를 할 수 있는 대상을 두기 위해 IFocusTarget 인터페이스를 만들어서 이 인터페이스를 구현해야지만 포커스 가능하도록 만들었다. 그리고 오딘 인스펙터의 [Button] 을 사용했는데 정말 편했다.. 왜 에셋스토어 순위권에 들어갔는지 알것같다.. 진작 살걸 그랬다.
조이스틱을 통해 캐릭터 이동과 카메라 무빙을 구현했다. 이동은 간단하게 네브메시에이전트의 벨로시티를 변경해서 구현했다. 다만 카메라가 바라보는 방향을 정면으로해서 캐릭터를 움직이는걸 구현하는데 살짝 어려움이 있었다. 네브메쉬 에이전트의 벨로시티는 현재 캐릭터의 Y축 로테이션값을 고려하지 않기 때문이다. 그래서 벨로시티값에Quaternion.AngleAxis(cameraYrotation, Vector3.up) 을 추가로 곱해주어 이동 처리를 구현했다. 고민사항으로는 조이스틱의 행동을 캐릭터 이동에만 수행하는데 아레스에서는 가끔씩 스토리상에서 오토바이를 타면서 총을 쏘는등 조이스틱의 행동에 다른 작업을 할 수 있도록 구현되어 있는것 같다. 나도 조이스틱의 행동을 인터페이스화 해서 설계할지 고민중이다.
1. 최근 오픈한 '아레스'나 여러 3D RPG 게임을 참고하여 3D 게임 개발 능력 향상 가상 조이스틱을 이용한 캐릭터 이동 3D 환경에서 카메라 이동, 시네마틱 카메라 구현 라이트를 사용한 환경 구성 및 최적화 기법 이해 3D 캐릭터 애니메이션 구성 (미정) 터레인을 이용한 환경 구성 2. 구매한 Odin Inspector를 활용해서 커스텀 에디터 능력 향상 3. 파이어베이스 스토리지 연동을 통해 에셋 번들 사용 에셋 번들 활용을 위한 버전 관리 시스템 4. BT 로 AI 진행 5. 안드로이드 모바일 환경 구동 6. 데이터 관리 엑셀 CSV를 이용한 데이터 관리
모바일 게임에서 무한히 올라가는 스크롤 뷰가 있을 때 스크롤 뷰에 모든 데이터 개수 만큼 오브젝트가 존재하면 메모리가 낭비되게 됩니다. 그래서 메모리 최적화를 위해 무한 스크롤 뷰를 구현해 보았습니다. 아래는 무한 스크롤 뷰 클래스입니다. StageScrollViewController.cs using RPG.Battle.Core; using RPG.Core; using System; using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // ORDER : #8) 스테이지 선택 씬에서 무한 스크롤링 UI 구현 // 참고 URL : https://w..
플레이어 장비의 헬멧과 바지의 인챈트 효과는 액티브 스킬을 부여할 수 있습니다. 그래서 전투에 들어가기전 전투 스킬 UI 버튼의 온클릭 이벤트에 액티브 스킬을 세팅할 수 있도록 구현했습니다. // ORDER : #7) 전투 시 플레이어 캐릭터의 바지와 헬멧의 인챈트를 확인하여 액티브 스킬을 장착 // 액티브 스킬을 세팅합니다. public void InitAbility(Helmet helmet, Pants pants, BattleStatus status) { if (helmet.suffix != null && helmet.suffix.isIncantAbility) // 헬멧의 접미 인챈트가 있고 인챈트에 따로 효과가 있다면 { HelmetIncant incant = helmet.suffix as Helm..
캐릭터는 현재 들고있는 무기가 한손검, 양손검이냐에 따라서 무기를 들고있는 외형을 변경하도록 기획했습니다. 하지만 실제로 구현을 해보니 하나의 애니메이션 컨트롤러에 한손검 애니메이션과 양손검 애니메이션을 전부다 넣으려고 하니 트리거 설정도 복잡해지고 애니메이터도 번잡해졌습니다. 그래서 기본 애니메이션 컨트롤러를 한손검 애니메이션만 넣고 양손검은 애니메이션 컨트롤러 오버라이드를 통해 런타임시 캐릭터의 애니메이터 컴포넌트의 애니메이션 컨트롤러만 변경하여 한손검과 양손검 애니메이션을 변경하도록 구현했습니다. // ORDER : #6) 현재 무기 외형에 따라 나올 애니메이션 컨트롤러를 변경 public void EquipWeapon(int weaponApparenceID, weaponHandleType weap..
각 3D 캐릭터가 자동 전투를 진행해야하는데 플레이어 캐릭터는 항상 자신에게서 가장 가까운 적을 대상으로 잡도록 만들어야 했습니다. 그래서 전투를 관리하는 배틀 매니저 클래스를 통해서 가장 가까운 적을 도출해내는 함수를 만들어서 구현했습니다. // ORDER : #5) 현재 자신의 위치에서 가장 가까운 컨트롤러를 반환하는 함수 /// /// 가장 가까운 T를 찾아서 리턴합니다. /// /// Controller한정 public T ReturnNearDistanceController(Transform transform) where T : Controller { if (typeof(T) == typeof(PlayerController)) // 찾는 컨트롤러가 플레이어 컨트롤러라면 { if (livePlaye..
가끔씩 실수로 잘못된 데이터 타입을 가져오는 경우가 있었습니다. 그래서 제네릭 형식 제약 조건을 걸고 장비아이템 데이터만 가져올 수 있도록하는 메서드를 만들었습니다. 제약 조건을 사용함으로써 실수로 해당 함수를 작성하더라도 컴파일단계에서 에러를 도출할 수 있도록 만들었습니다. // ORDER : #4) 제네릭 형식 제약조건으로 장비아이템 데이터를 가져오는 함수 // 장비 아이템 데이터를 가져옵니다. public bool GetEquipmentData(int id,out T sourceData) where T : EquipmentData { EquipmentData data; if (!equipmentDataDic.TryGetValue(id, out data)) // 찾는 ID가 없다면 { Debug.Lo..
현재 상태에 따라 다른 동작을 수행하도록 컨트롤러의 동작을 상태패턴을 이용해서 만들었습니다. 유휴 상태(IdleState), 추적상태(ChaseSate), 공격상태(AttackState), 디버프 상태(DebuffState), 죽음 상태(DeadState)를 만들었습니다. 본 포트폴리오의 상태 패턴은 아래와 같이 구성되어 있습니다. 전투 시 컨트롤러는 현재 자신의 상태를 판단하여 동작을 수행합니다. 아래는 전투 캐릭터의 컨트롤러 클래스입니다. 자신의 상태를 파악해서 수행해야하는 상태를 리턴하는 메서드입니다. // ORDER : #3) 현재 상태에 따라 컨트롤러의 동작을 변경하는 상태패턴 구현 private IState CheckState() { if (battleStatus.isDead) // 나는 죽어..
CoPractice
'Portfolio' 카테고리의 글 목록