전체 글 14

유니티 궁수의 전설 모작 - 7 (조이스틱 UI)

조이스틱을 만들어보자 조이스틱을 만들면서 앵커와 앵커포지션의 개념을 알아갔다. 일단 앵커란 어디를 기준점으로 삼을지 정하는것이다 이렇게 바텀 left를 앵커로 지정하면 canvas 왼쪽 맨밑이 0,0으로 기준이 잡힌다 그리고 모든 UI를 왼쪽 밑 앵커로 지정을 해야만 했는데 그 이유는 기본적으로 손가락으로 화면을 터치하면 그 터치한곳의 좌표도 왼쪽 밑이 0,0으로 기준이 잡힌 좌표이기 때문에 똑같이 맞춰야 한다. 그렇다면 누르는곳으로 조이스틱이 터치한곳으로 따라가도록 해보자 이런식으로 이미지 3개를 지정하였다 이미지 3개를 만든 이유는 제일 부모 이미지를 캔버스 크기와 똑같이 맞추고 해당 이미지를 클릭 하였을 때의 좌표값으로 하위 오브젝트인 조이스틱을 옮기기 위해서다 해당 클래스들은 UI를 터치했을 때,..

유니티 궁수의 전설 모작 - 6 (스테이지 구현)

원래의 목적은 스테이지도 데이터베이스로 장애물,벽,몬스터 모두 데이터화 시키려고 하였다 근데 NavMesh를 쓰면 씬에서 스테이지를 설정 해줘야해서 고정 스테이지만 가능한 시스템이었다. 그렇기 때문에 일단은 장애물이 없는 상태로 몬스터만 나오게 설정하고 나중에 A* 길찾기 알고리즘을 따로 추가하여서 제대로 하도록 하려고한다 일단 몬스터만 데이터화 시키고 스테이지를 구성해 보겠다. 일단 스테이지는 스테이지안에 몬스터를 다 잡았을 경우 다음 스테이지로 넘어가도록 설정하였다. 이런식으로 현재 스테이지에 몬스터리스트의 크기가 0이면 isOpen을 true로 만들어주고 이상태에서 플레이어가 문에 다가오면 다음 스테이지로 넘어가도록 하였다. 그럼 NextStage 함수를 살펴보자 데이터베이스는 이런식으로 스테이지 ..

유니티 궁수의 전설 모작 - 5 (몬스터 - 패턴 Type에 따른 패턴 스타일)

패턴 테이블에는 각 행동 패턴 타입을 int형으로 분류 해놓았다. 1 : 돌진형 2 : 투사체 발사형 3 : 투사체 난사 타입별로 살펴보기전에 모든 패턴 동일하게 공격준비 상태 드가기전에 목표 타겟을 정합니다 현재 패턴의 목표 타겟이 플레이어면 플레이어의 위치값 랜덤이면 랜덤 좌표를 지정한다. 1.돌진형 현재 돌진형은 공격준비때 할게 없어서 바로 넘어가게 해놓았습니다. 다음은 패턴입니다. 첫줄에 JUMP는 점프 패턴의 경우 해당하는데요 역탄도학으로 제작하였습니다. 역탄도학 코드는 https://robatokim.tistory.com/entry/%EA%B2%8C%EC%9E%84%EC%88%98%ED%95%99-%EC%97%AD%ED%83%84%EB%8F%84%EA%B3%84%EC%82%B0%EC%9D%84..

유니티 궁수의 전설 모작 - 4 (몬스터 AI & 스크립트 작성)

데이터베이스 연동이 끝났으면 몬스터를 제작해보자 일단 몬스터 상태는 4개로 지정하였다. 대기 상태에서 대기 쿨타임이 끝나면 패턴 지정 상태에서 패턴을 지정하고 공격준비 상태 - 패턴 상태가 된다. 패턴 지정상태를 따로 만들어둔 이유는 패턴이 랜덤으로 지정 되는 몬스터와 순차적으로 진행되는 몬스터가 분리되었기 때문이다. 1.Start Setting (시작) 45 - 몬스터 프리팹을 끌어 놓으면 몬스터가 바닥으로 내려가있어서 알아서 올라올 수 있도록 Y축을 설정 하였다. 46 - NavMesh는 길찾기 알고리즘 시스템으로 플레이어를 향해서 이동만하는 몬스터에게 적용하려고 한다. 근데 NavMesh는 딱히 쓰고싶지 않아서 나중에 스크립트로 길찾기 알고리즘을 해보려고한다 NavMesh는 맵마다 Bake버튼을 눌..

두 오브젝트 사이의 중간 값 구하기

P1은 자신과 P2사이의 중간위치에서 Y축으로 5높은 곳으로 이동하려고한다. 그럼 일단 중간 지점을 구해야 한다. 그렇다면 먼저 거리를 구하자 거리 : Dis = P2 - P1 거기를 구했으면 중간지점을 구하려면 Dis/2를 해야하는데 여기서 P1을 더해야한다 중간지점 : vDis = P1 + (Dis/2) 이렇게 구했으면 y축을 올리고 Rp에 넣자 vDis.y += 5 Rp = vDis 그러면 위치를 구했으니 Rp로가는 방향을 구해야한다. 방향은 Rdir에 넣겠다. Rdir = (Rp - P1).normal 원하는 포지션을 얻었으면 다시 p1와 계산해서 거리를 구해야하고 여기서 노말라이즈하면 방향이 된다.

유니티 정보 2021.07.24

FSM 유한상태머신 ( 알고리즘 )

몬스터의 AI는 플레이어를 공격하거나 추적하거나 되돌아가거나 정찰을 하거나 여러 행동 패턴이 존재한다. 이 행동패턴들을 각 상태로 구별해서 상태 전환을 시키고 그 상태에 맞는 행동,애니메이션이 나오도록 하는것이다. 그림으로 표현해보자 이렇게 각각의 행동 상태가 존재하도록 하고 이것을 코드로 구현한다고 하면 이런식으로 enum 열거형 변수와 switch를 이용해서 해당 상태일 때 행동을 넣어주면 된다. 여기서 enum이란? enum은 열거형으로 간단하게 선풍기 스위치로 생각하면 된다. 선풍기 스위치를 누르면 그 스위치상태가 된다.

유니티 정보 2021.07.24

유니티 궁수의 전설 모작 - 3 (데이터베이스 연동 & 로딩창 만들기)

몬스터의 경우 데이터베이스를 연동해서 몬스터 스크립트 하나만으로 하도록 도전해보려고한다. 이전에 게임을 만들 때는 몬스터 하나하나를 스크립트 따로 지정해주어 하드코딩을 하였는데 기획을 배우면서 이방법이 잘못되었다는걸 깨달았다. 1.데이터 베이스 작성 (구글 스프레드 시트) 일단 구글 스프레드 시트를 사용한 이유는 데이터베이스 파일을 따로 가지고다니지 않아도 구글에 항상 존재하기 때문에 이용하였다. 첫번째는 몬스터의 스테이터스값을 넣은 데이터베이스이고 두번째는 몬스터의 행동 패턴값을 넣었다. 두번째에서 만든 행동 패턴을 첫번째 테이블에서 Petrun1 ~ 5 안에 행동 패턴 ID를 넣어주면 그 행동을 실행하도록 하였다. 2.구글 스프레드 시트 & 유니티 연동 일단 구글 스프레드시트는 인터넷이기 때문에 Un..

유니티 궁수의 전설 모작 - 2 (몬스터 자동 타겟팅)

궁수의 전설은 적을 자동 타겟팅 하는 방식으로 내가 하려는 방법은 필드 안 모든 몬스터에게 Line을 발사해서 중간에 벽이 있는지 없는지 체크 후 사이에 벽이 없는 몬스터만 NowallMonster 리스트에넣고 여기서 또 몬스터마다 거리를 체크 후 가장 가까운 몬스터를 타겟팅 하도록 하였다. 이런식으로 구별하기 쉽게 모든 몬스터에게 라인을 발사 후 사이에 벽이 있으면 빨간색 Line으로 처리하였다. 다음은 코드를 보자 일단 그라운드 스크립트에 들어오는 몬스터를 List에 넣고 플레이어가 그라운드에 들어오면 List를 플레이어 스크립트에 있는 몬스터 리스트에 넘겨준다 다음은 플레이어 스크립트로 넘어와서 몬스터 리스트에 있는 몬스터들에게 모두 Line을 발사하고 벽이 없는 몬스터만 L_NoWallMonste..

유니티 궁수의 전설 모작 - 1 (플레이어 이동 및 물리 버그 해결)

1.캐릭터 움직임, 물리 버그 해결 일단 플레이어 이동부터 구현해보자 Horizontal과 Vertical을 이용해서 해당 키를 누르면 해당 방향값을 MoveVec이라는 벡터 변수에 넣고 플레이어를 MoveVec방향으로 이동 시켰다 중간에 조건문으로 라인을 발사한걸 볼 수 있는데 이 Line은 캐릭터가 벽을 뚫고 나가는 현상을 방지하기 위해서 캐릭터 앞에 일정 거리의Line을 발사해서 벽이 있으면 앞으로 나아가지 못하도록 하였다. 그리고 마지막 줄은 캐릭터가 멈추지 않고 이동중일 때는 몬스터를 바라보지않고 이동 방향으로 바라보게 하였다.