본문 바로가기

전체 글

(79)
12주 - 최종 프로젝트(2D) 이번 프로젝트 목표 맵 에디터 생성과 맵 정보를 데이터화 고민- 더보기 맵에는 여러가지 정보를 담고 있을텐데, 어떤식으로 접근하면 좋을까. 맵을 구성하기 위해 무엇이 필요할까 - 맵의 크기 - 맵을 구성하는 타일 - 맵에 배치 시킬 수 있는 장애물 및 오브젝트 어떤 것을 데이터화 시키면 좋을까? 맵을 구성하고있는 타일 및 오브젝트들을 타입과 아이디를 통해 저장해놓고 스크립터블 오브젝트를 사용해 타입과 아이디로 접근해 특정위치에 생성시키는건 어떨까. 구조체로 타입과, 타일 또는 오브젝트의 아이디, 생성위치를 만들어서 데이터화 해서 사용하면 어떨까
11주차 - 패시브 스킬 트리 구현 플레이어의 스테이터스를 증가시켜주는 패시브 스킬 트리를 만들어보자. 1. 현재 찍은 스킬들을 모아놓은 딕셔너리 생성 - PlayerStats - 현재 가지고 있는 스킬들을 확인 2. UpgradeStats_Base 클래스 생성 - 여러가지 스테이터스를 증가 시킬 수 있으니 증가시킬 스테이터스와 증가량, 고정값으로 올릴지 퍼센테이지로 올릴지 정하는 타입을 가진 구조체를 리스트로 만들기. public List upgradeStatusList = new List(); - 최대 몇까지 스킬을 찍을 수있는지 선택 - 해당 스킬을 찍기위한 조건을 확인하기위한 구조체 생성 - 조건을 만족해 스킬을 찍었을 때 실행할, 스킬과 스킬을 연결하는 라인 생성 public List lineList = new List(); - ..
11주차 - 콤보 공격 구현하기 (2D) 1. 준비 2. 애니메이터 조작 1. 준비 두개의 공격 애니메이션을 준비합니다. 공격 위치는 폴리곤 콜라이더로 잘 조절해 줍니다 Sub-State machine 으로 공격 애니메이션을 그륩화 해주었습니다. 두개의 공격 로직을 아래 사진처럼 연결해줍니다. 2. 애니메이터 조작 애니메이션의 Exit Time 과 Transition Duration을 사용해 아주 쉽게 구현할 수 있습니다. Exit Time 은 종료 시점을 제어하는 매개변수로 상태를 종료하기 전에 특정한 시간을 기다릴 수 가 있습니다. 예를 들어 A에서 B 상태로 전환하는 트랜지션의 Exit Time을 0.7 로 설정한다면, 상태 A의 애니메이션이 70%정도 재생되고 나머지 시간동안 트랜지션의 조건을 평가해 충족되면 B 애니메이션으로 넘어갑니다..
10주차 - 개인 심화 3D(NavMeshAgent.path.corners, NavMeshSurface , Animation Curve) 1. 이동 로직 수정하기 (NavMeshAgent.path.corners) 2. 숨겨진 문 상호작용 만들기 (NavMeshSurface) 3. 횃불 상호작용 만들기 (AnimationCurve) 1. 이동 로직 수정하기 캐릭터가 목표 지점으로 이동할때, 이동하는 방향이 아닌 도착지점을 바라보고 이동하는 문제점이 있었습니다. Navigation 으로 목표위치를 지정 해주고, 캐릭터의 방향을 단순히 목표위치에서 현재위치를 뺀 값을 노멀라이즈 해준 것으로 캐릭터의 방향을 결정 했기때문이었습니다. 또한 캐릭터의 행동을 UI를 통해 통제 할 것이기 때문에 마우스 클릭으로 목표위치를 정한뒤 바로 움직이는게 아닌 모든 행동이 끝났을때 사용자가 엔터키를 누르면 움직이게 만들 것 입니다 . 그래서 Navigation 에..
10주차 - 개인 심화 3D(Navigation, 이동 경로 시각화 하기) 1. 플레이어 이동 Navigation으로 로직 바꾸기 2. 이동 경로 시각화하기 1. 플레이어 이동 Navigation으로 로직 바꾸기 마우스 클릭으로 목표지점으로 이동만 하는 단순 로직은 중간에 장애물을 만나면 장애물을 피해 목표위치에 도달할 수 없음으로, 알고리즘을 통한 최단경로를 찾는 걸로 로직을 수정해 줘야 했습니다. 일일이 A* 알고리즘을 구현할 필요없이 이미 Navigation에 구현되어 있음으로 이를 사용해 플레이어의 이동 로직을 수정해 줍니다. 2. 이동 경로 시각화하기 이동 경로는 LineRenderer을 통해 그려줄 것 입니다. NavMeshAgent 의 path.corners 를 사용해 캐릭터의 이동경로를 배열로 받아와 이를 사용해 이동경로를 그려줍니다. 플레이어가 움직일 경우 Fi..
10주차 - 개인 심화 3D(움직임,구르기,대쉬,잔상) + Mixamo Tip 1. 마우스 클릭으로 캐릭터 움직이기. 2. 구르기 3. 대쉬 4. 잔상 효과(Mesh) 더보기 fbx에서 Materials - Location 에 Use External Materials(Legacy) 로 체크후 적용 한 뒤 다시 Use Embedded Materials로 적용시켜보기. 그래도 안되면 Textures - Extract Textrues 로 해당 fbx 에 텍스쳐를 받아와 수동으로 텍스쳐를 넣어주는 방법을 쓰면 해결. 1. 마우스 클릭으로 캐릭터 움직이기. 카메라에서 마우스 클릭지점으로 Ray 를 쏘고, 바닥과 Ray 가 만나는 지점을 hit 으로 저장해줍니다. Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out h..
디자인 패턴에 대한 고찰(2) - 옵저버 옵저버 패턴에 대해 알아보고 고찰해보자.. 옵저버 패턴은 객체 간의 일대다 의존성을 정의하는 디자인 패턴입니다. 이 패턴은 한 객체의 상태 변화가 다른 객체들에게 자동으로 알려지고, 이에 따라 관련된 객체들이 업데이트될 수 있도록 하는데 사용됩니다. 그렇기 때문에 항상 접근 방향에 대한 고민이 필요 합니다. 매니저급 클래스에서 특정 개체의 상태를 계속 체크하고, 상태가 변했을때 옵저버에게 전달하는, 주체에서 옵저버를 향한 접근방향의 경우 옵저버가 삭제되거나, 로직이 변경됬을 경우 매니저 클래스 또한 그에 맞게 로직을 변경해야하는 경우가 발생할 수 있습니다. 때문에 옵저버에서 주체를 향한 접근방식이여야 좀 더 번거로운 과정을 줄일 수 있습니다. 1. 옵저버 인터페이스를 상태를 확인해야하는 개체에 상속 시킵..
디자인 패턴에 대한 고찰(1) - 싱글턴 디자인패턴, 싱글턴에 대해 알아보고 이에 대해 고찰해 보자.. 싱글턴패턴은 인스턴스가 오직 하나만 생성됨으로 인스턴스의 유일성을 보장해 항상 동일한 인스턴스를 사용할 수 있습니다. 또한 전역적 접근으로 어디서든 동일한 인스턴스에 접근해 코드의 유연성과 확장성을 향상 시킬 수 있습니다 . 하지만 항상 주의 해야할 점은 싱글턴패턴의 클래스의 인스턴스는 무조건 1개만 존재해야하며 전역적으로 관리하기 때문에 싱글턴 패턴의 클래스가 많아질 수록 메모리 누수 문제와 성능상 좋지않은 영향을 줄 가능성이 높습니다. 일반적인 싱글턴 public class SingletonExample : MonoBehaviour { private static SingletonExample _instance; public static S..