Unity/로봇 체스 개발 일지 (22) 썸네일형 리스트형 [Unity] 몬스터, 아이템 스포너 요약아이템과 몬스터를 소환하기 위한 스포너를 만들기 위한 알고리즘을 작성하였다. 아이템 스포너는 맵 전체에 랜덤으로 소환하므로 간단하였다. 몬스터는 소환할 때 맵 끝 쪽에 소환 구역을 지정하여 소환하는데 소환할 때 로봇과 겹치지 않기 위해 중복되지 않은 랜덤을 사용하였다.아이템 스포너공중 지원 아이템은 단순히 맵 전체에 랜덤으로 소환하는 방식이기 때문에 조건이 까다롭지 않고 코드가 단순하다.ItamSpawner.cspublic class ItamSpawner : MonoBehaviour{ bool start = false; int turnCount = 7; private void Update() { if(Instance.GameTurnCount % turnCount ==.. [Unity] 스킬 구현(4) : 공중 지원 스킬 알고리즘 요약공중 지원 스킬을 구현하기 위해 표지판 배치와 발사 알고리즘을 스킬에 맞게 새로 만들었다. 배치 알고리즘은 마우스 위치를 따라 다니며 원하는 위치를 지정할 수 있게 하였고, 발사 알고리즘은 전투기 그림자가 지나가면서 가짜 총알을 5구역에 랜덤으로 발사하며 데미지 판을 생성하게 하였다..표지판 배치 알고리즘공격 선택 표지판은 마우스를 따라가므로 그 주변에는 데미지 범위와 사거리 표기를 한다. 이후 마우스를 클릭하면 발사 알고리즘이 작동한다.발사 알고리즘공중 지원인 만큼 전투기가 기관총으로 지원하는 형태를 가지려고 한다. 그렇기에 전투기 그림자가 지나간 후 총알이 날아가는 형식으로 구현할 예정이다.1. 45도 기울어진 전투기 그림자를 생성한다.2. 전투기 그림자를 클릭한 좌표보다 아래에 위치하는 1차 함.. [Unity] 스킬 구현(3) : 광선총 발사 알고리즘 요약광선총 알고리즘을 만들기 위해 레이저와 총, 레이저 포인터를 만들어 코드를 작성할 때 포인터를 기준으로 광선총을 회전시키며 레이저를 늘렸다. 레이저를 늘릴 때 이상한 식을 사용하는데, 이는 Unit 단위와 Scale을 1대 1로 대응시키기 위함이다. 이 방법은 레이저의 Unit 단위를 Inspector에서 대응시키지 않아 발생한 문제로, 이상한 식을 사용하는 것보다 이미지 픽셀 단위를 Unit 단위와 대응하게 만드는 것이 좋다.광선총 발사 알고리즘광선총은 레이저과 총부분으로 광선이 지나간 곳에는 데미지 판을 놓아둬 데미지를 입히는 방식으로 동작한다.이를 구현하기 위한 알고리즘은 다음과 같다.1. 총을 지정된 좌표의 반대편 맵 끝으로 향하게 하면서 총구 방향을 시작 지점에 둔다.2. 지정된 좌표 만큼 .. [Unity] 스킬 구현(2) : 데미지 판정, 스킬 알고리즘 요약로봇을 제거하는 방법으로 총알을 실제로 날리는 방법과 데미지 판을 만들어 생성하는 방법으로 나뉜다. 다만 데미지 판을 만들게 되면 총을 발사할 때 총알이 나가지 않으므로 가짜 총알을 만들어 실제 발사되는 것처럼 하였다. 이때 가짜 총알은 처음 발사된 곳에서 목적지까지 거리가 현재 지점보다 작다면 사라지도록 하였다.스킬 알고리즘은 대부분 유사한 모습의 코드를 가지고 있으나 총알과 데미지 판 중 어느것을 사용한지에 따라 달라진다.총알Bullet.cspublic class Bullet : MonoBehaviour{ float speed = 10; public bool isMonster = true; void Update() { transform.Translate(speed.. [Unity] 스킬 구현(1) : 표지판 디자인, 배치 알고리즘, Skill 요약표지판을 디자인한 후 표지판 배치 알고리즘 작성하였다. 표지판을 배치하기 위해 해당 공간을 사용할 수 있는지, 어떤 표지판을 배치하는지 판단하기 위해 CheckAndPlaceSelection()을 만들었지만 매개변수가 많아 간략화한 오버 로딩 함수를 작성하였다. 이를 통해 각 스킬의 배치 알고리즘을 작성하였다. 추가로 스킬을 사용횟수를 제한하는 함수를 통해 스킬을 제거할 수 있다.표지판 디자인*몬스터 소환 구역은 추후 글 작성예정표지판 배치 알고리즘칼, 권총, 저격총: 사거리 표기를 통해 사거리를 알린 후 공격 선택을 통해 위치를 선택하면 가장 앞의 몬스터를 공격산탄총: 공격 선택을 통해 위치를 선택하면 좌우 혹은 상하에 피해를 줌광선총: 상하좌우 중 한 곳을 선택하면 그곳을 기준으로 맵 끝까지 피해.. [Unity] 로봇 상태 관리(2) : Player, PlayerStateMachine 구현 요약플레이어도 이동, 스킬, 정지상태를 관리하지만, 특수하게도 스킬에 종류가 존재한다. 그래서 스킬상태 이지만 기술 종류는 바뀌므로 상태가 안 바뀌어 원하는 스킬의 시작과 끝을 실행할 수 없다. 이를 수정하기 위해 스킬상태 안에 스킬 상태를 사용하는 방법을 고안하였다. 추후 클래스를 통해 변화하는 방식으로 바꾸는 것도 좋을 것 같다.플레이어 상태 기계는 몬스터 처럼 상속될 때마다 상태에 대한 스크립트가 달라지지 않으므로 오히려 더 간결하다.스킬 상태안에 스킬 종류 상태머신이러한 복잡한 상황이 된 것은 설계단계에서 이동, 스킬, 정지와 같은 명확한 상태만을 인지하고 있고 스킬종류에 대한 것을 간과하여 발생한 일이다. 현재 플레이어 상태 기계는 GameManager에 State 열거형을 통해 상태를 정할 수.. [Unity] 로봇 상태 관리(1) : Monster, MonsterStateMachine 구현 요약몬스터는 이동, 스킬, 정지처럼 상태를 관리하기 위해서 유한 상태 기계(Finite State Machine, FSM)를 구현하였다. 구현하기 위해 IState로 상태 인터페이스를 만들고 상태 기계를 만든 후 몬스터에게 적용하였다. 적용된 상태 기계의 상태를 바꾸기 위해 예시로 RobotKnife의 상태가 변하는 과정을 설명하였다.IState.cspublic interface IState{ public void Entry(); public void IStateUpdate(); public bool Exit();}이동, 스킬, 정지와 같은 상태는 IState를 상속받아 다음과 같이 사용한다. 참고로 Exit()가 bool인 이유는 실제로 동작이 취소되는 경우 원치 않게 Exit()를 발.. [Unity] 로봇 움직임 구현(3) : MonsterMovement 몬스터 동작 알고리즘 요약몬스터 동작을 구현하는 데 필요한 조건을 확인하고 알고리즘을 작성하였다. 알고리즘을 작성하기 전 고려 사항으로 로봇을 겹치지 않게 하려고 미리 도착하는 목적지를 설정한다. 또한 목적지를 찾지 못하는 경우 플레이어와 가장 가까운 곳을 찾아 목적지로 설정한다.몬스터 동작조건1. 로봇 체스에서 몬스터는 대각선으로 이동, 공격을 할수 없다.2. 로봇을 서로 겹칠 수 없다. 알고리즘1. 몬스터는 플레이어를 목적지로 하여 길을 찾는다.2. 목적지를 찾으면 몬스터의 이동 가능 거리만큼 간다.3. 목적지를 찾지 못한 경우 플레이어의 가장 가까운 위치에 이동한다.4. 가장 가까운 위치가 현 위치이면 가만히 있는다.5. 가장 가까운 위치를 찾지 못하는 경우 가만히 있는다.알고리즘 작성 시 고려 사항로봇을 겹치지 않는 .. 이전 1 2 3 다음