6/26 최종 프로젝트 일지 - 스플래툰 모작
·
스파르타코딩클럽_Unity개발과정
1. 팀원님들과 기획 초안 작성 2. 막혔던 부분에 대한 실마리를 잡음1) 현상오브젝트에 물감 탄환을 맞추면 맞은 면의 비율대로 원이 찌그러지거나 늘어나는 현상 발생예) 20:3:1 스케일 비율의 xy 평면에 탄을 맞추면 해당 원이 20:3으로 늘어나 타원이 되어버림 2) 원인UV 좌표를 통해(게임이 끝났을 때, 점유율을 계산하기 위해 필수) 텍스쳐의 특정 비율에 물감색을 찍으려 하였는데오브젝트 표면의 텍스쳐가 오브젝트의 로컬 스케일에 따라 늘어나원래 찍으려는 모양에 비해 지나치게 커지거나 비율이 이상해짐3) 해결 방법 (예상)(1) 탄이 맞은 평면이 xy, yz, xz 어떤 면인지 판정 enum SurfacePlane { XY, XZ, YZ } ..
6/25 작업 내용
·
스파르타코딩클럽_Unity개발과정
1. 스플래툰 모작: 물감 뿌리기 구현 중 1) UV 좌표(텍스쳐의 좌표. 0,0~1,1)총을 쏘아 오브젝트의 맞은 위치를 중심으로 원을 그려서 물감을 뿌리는 느낌을 주려고 함>> UV 좌표를 기준으로 원을 그리려 함 (색칠한 맵 오브젝트들에 메시 콜라이더 필요)>> 계산이 복잡 = 오브젝트의 로컬 스케일, 맞은 면의 탄젠트 벡터에 따라 찌그러진 원을 펴줘야 함 2) 월드 좌표 기준>> 맞은 위치에 원을 그리는 것은 쉬움>> 그러나, 결과에서 각 팀이 몇%씩 칠했는지 결과를 판정하기 위해서는 월드 좌표는 방법이 떠오르지 않음..>> UV 좌표는 칠한 부분들을 구해서 비율을 구하기에는 용이>> 월드 좌표는 물감들을 덧씌우면서 난전이 벌어지다 보면 비율을 구하는 게 거의 불가능해 보임>> UV 좌표로 롤백..
최종 프로젝트 초반 공부한 내용 간단히 큰 틀만 정리
·
스파르타코딩클럽_Unity개발과정
6/23 : Photon Pun2 멀티 플레이 예제를 따라함 (로비씬, 플레이씬)6/24 : 플레이씬에서 플레이어가 총을 쏘면 벽면에 착탄 지점으로부터 일정 반경 원 모양으로 색칠할 수 있도록 시도.. 하였으나 벽 전체가 칠해지는 것까지는 성공 >> 마스크 문제 >> 해결하는 중
유니티 심화 팀 과제 - 탑다운 2D 보스
·
스파르타코딩클럽_Unity개발과정
보스와 패턴을 따로 떼어 구현하였습니다.보스 : FSM으로 각 상황별 맞는 모션을 재생(Idle, Death, Attack, Run)패턴 : 애니메이션 이벤트 혹은 StateMachineBehaviour을 통해 알맞는 타이밍에 공격 패턴 불러오기 및 사운드 재생 1. 고블고블린패턴 1) 플레이어가 멀리 있으면 플레이어 위치에 투척패턴 2) 플레이어가 어느 정도 근접하면 근처에 다량의 폭탄 투척패턴 3) 플레이어가 근접하면 플레이어 반대 방향으로 도주하며 그 경로에 폭탄 설치패턴4) 플레이어가 멀어지면 추적 2. 베일드 블레이드패턴 1) 근접: 칼을 빼어 베기패턴 2) 원거리 : 발도술로 플레이어 방향으로 길게 베어냄>> 회피하기 어려움 : 스킬만으로 원거리에서 거리를 두고 전투하면 더 어렵게 설계 패턴..
애니메이터의 Exit Time
·
스파르타코딩클럽_Unity개발과정
보통 애니메이터에서 Blending 은 모션 간 보간을 하여 자연스럽게 움직이게 하기 위한 옵션입니다.2D에서는 스파인 애니메이션과 같은 사례에서 각 조각의 위치 보간을 위해 쓸 수도 있겠네요 하지만 2D 스프라이트 애니메이션을 쓸 경우 Blending은 효과를 발휘하지 못합니다.이에 따라 블랜딩 옵션을 끄다가 문제가 발생하였던 것이 있어 정리합니다.공격 모션이 끝나야 Idle로 돌아오게끔 하려고 함 1. Has Exit Time : 체크하면, 모션이 끝나고 다음 모션으로 전환하도록 2. Exit Time : 해당 애니메이션의 어디에서 끝나는지 (0 ~ 1) 주의 : 1보다 작은 값이 들어가 있으면 해당 애니메이션은 끝까지 재생되지 않고 끊깁니다. 예) 0.8 >> 80%까지만 재생하고 트랜지..
6/13 유니티 심화 팀 프로젝트 작업 내용 간단히 요약
·
스파르타코딩클럽_Unity개발과정
나중에 살 붙여쓰기 ㅠ 1. 보스 몬스터/패턴 구조 간단하게 완성정리하면서 그림으로 만들어서 올리기 2. 트러블슈팅 내용1) 몬스터가 처음 1번만 공격하고 대기해결 과정 : 디버깅을 통해 변수에 다른 값이 들어가 있음을 찾아 해당 문제를 확인원인 : 공격이 끝난 후 애니메이션만 자동으로 idle로 바뀌어서 착각한 휴먼 에러.FSM에서 공격 상태에서 대기 상태로 빠져나오는 부분이 없었음. 해결: 공격 모션이 끝날 때 FSM도 idle(대기) 상태로 바꾸어 정상적으로 순환하게끔 2) 클래스의 이름 변경 후부터 Null이 계속 발생해결 과정: 코드, 인스펙터를 확인하며 문제가 생길 여지를 발견하지 못함>> 유니티의 문제라는 생각이 들어 에디터를 다시 켜보았지만 해결되지 않음>> 시간 문제로 팀원님들과 코드 ..
오늘 한 내용 간단히 써두고 다음에 보충하기..
·
스파르타코딩클럽_Unity개발과정
적 AI 구현을 위한 기반을 만들다 급하게 보스 하나를 완성해야 해서 선회보스 만들다 취침..
개인 프로젝트 제출 및 팀 프로젝트 관련 공부
·
스파르타코딩클럽_Unity개발과정
3D 방치형 연습 (필수과제 일부 구현) 1. 기본 UI 구현 게임 화면에 HP바, 골드, 인벤토리 버튼 표시 2. 플레이어 AI 시스템 FSM을 이용하여 플레이어, 적이 자동으로 상대를 추적하며 전투하는 것을 구현 3. 게임 내 통화 시스템 적을 처치하면 골드 획득 4. 아이템 및 장비 창 UI 구현(일부 구현) 인벤토리를 열어보면 기본적으로 HP 포션 존재 아이템에 마우스 커서를 가져가면 정보창 출현으로 플레이어에게 어떤 아이템인지 알림 아이템 우클릭으로 사용 >> 체력 회복 그리고 오후부터 다음 팀 프로젝트에 대한 공지가 나왔기에 이에 대한 회의 및 사전 공부를 하였습니다. 이번 과제에서 FSM을 제대로 사용하지 못했기에 복습 차원에서 적 AI를 맡기로 했..
유한 상태 머신
·
스파르타코딩클럽_Unity개발과정
유한 상태 머신 (Finite State Machine, FSM)이하 FSM이라 줄여 부르겠습니다. 한 시기에 하나의 상태만 가지는 구조를 말합니다. 게임 캐릭터나 시스템의 복잡한 행동을 명확하게 상태별로 나누어 구조화합니다. 조건문을 통해 구현이 가능한 걸 굳이 왜 구조를 만들어 나누는가 하면, 상태 별로 로직을 나누어 코드가 더 읽기 쉽고 관리하기 쉬워집니다예측 가능한 동작을 수행하게 함에 따라 플레이어의 학습과 전략 수립에 도움을 줍니다. 예를 들어 게임 적 캐릭터의 기본적인 상태들을 살펴봅시다. 대기 : 제자리에서 가만히 있는 상태순찰 : 정해진/랜덤한 루트 배회추격 : 타겟 탐색에 성공하면 타겟을 뒤쫓도록공격 : 공격 가능 범위 내에 들어오면 타겟 공격 게임에 따라 필요하다면 더 추가할 수 있겠..
유니티 심화 개인주차 (2) - Json, 오브젝트 풀링, 스크립터블 오브젝트
·
스파르타코딩클럽_Unity개발과정
1. 간단한 JSON을 이용한 PlayerPrefs에 데이터 저장/불러오기int형으로 각각 나눠서 stage, wave, gold 등 이렇게 각 타입별로 넣고는 했는데 오늘 강의에서 한번에 해결하는 것을 보고 큰 충격을 받았습니다.사고가 굳었는지 기존에는 이렇게 할 생각을 하지 못했네요.고정관념의 벽을 하나 허물은 느낌입니다. JSON으로 데이터를 직렬화하면 그 데이터들이 하나의 문자열이 됩니다.이는 UnityEngine 네임 스페이스 안의 JsonUtility를 써서 클래스를 문자열로 바꿀 수 있습니다. 몇가지 제약 조건이 있는데 아래와 같습니다.1) [System.Serializable] 클래스2) 기본 자료형인 public 변수 (GameObject, Transform과 같은 유니티 객체는 직렬화 ..