본문 바로가기

유니티 게임 개발하기

2D 슈팅 게임을 만들자 - 현재까지 제작한 내용 정리 1. 대화 이벤트 저장 구현 2. 스테이지 패턴 구현 3. 플레이어 필살기 구현 4.보스패턴 구현 5.대화구현 6.간단한 스테이지 및 아이템 게이지 구현 더보기
Unite 2017 - Optimizing Unity: 강연 요약. 안녕하세요! 오늘 Optimizing 부분에 대해서 들었던 강연에 대해 정리를 해 볼까 합니다!PPT는 unite에서 제공해 주는 자료를 필요한 부분만 가져와 올렸습니다.혹시나 저작권에 문제가 된다면 말씀주세요! 그런 부분을 밖에서 못 찾아서 자료로 쓰려고 가져온 거라서, 문제가 되면 바꿔야 할 거 같아요. 1. Unity의 Transform 이동 최적화. 유니티의 트랜스폼은 저희가 코딩하는 것 말고도 뒤에서 많은 메세지 전송을 거칩니다. 특히 postion과 rotation 이 일어날 때, 각각 다른 메세지를 사용하는데요.Unity는 최근에 SetPositionAndRotation 이라는 함수를 추가하여 1개의 메세지로 이를 해결할 수 있도록 하였습니다.아래처럼, Transform 의 이동, 회전에는 .. 더보기
유나이트 2017 ( Unite 2017 ) 5/16 강연 정리! 안녕하세요! 윈디입니다. 최근에, 학업이 겹쳐서 하던 작업을 미루고 졸업 프로젝트를 시작하였습니다.VR 게임인데요, 한번쯤 정리해서 올리고 싶은데, 생각보다 짬이 안 나네요.시간 내서 정리해 올려야 하는데 말이에요.. 그런 것보다! 오늘 제가 포스팅을 쓰게 한 것은 Unity 에서 주최한 Unite 2017 이었습니다! 일찍 신청했는데 날짜를 잊고 있어서...전날에 급히 준비해서 참석했습니다. 유나이트 2017은 코엑스 오라토리움 1~3F 에서 진행되었습니다. 4개의 강연실(트랙)에서 한 시간에 4종류씩의 강의가 동시 진행되었고요, 각 트랙은 명확한 테마를 정하지는 않앗지만 대략적으로 유니티 트렌드, 모바일, 개인개발, 서버 등으로 나눠지는 주제를 가지고 강연이 진행되었다고 생각합니다. 제가 참석한 16.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (9) - 배경을 만들 때 필요한 것 안녕하세요! 윈디입니다. 최근 일이 바빠졌기도 하고, 만들던 게임의 방향성을 조금씩 확장 해 나가느라 한동안 포스팅을 못 했네요... 반성합니다. 단순히 따라서 만드는 게임이 아니라, 기왕에 만들거면 조금 더 다양한 기능을 만들고 싶었거든요.하지만 그걸 위해서 세부사항을 수정하는 것들은 말그대로 옵션 조절이었기 때문에 포스팅에 큰 의미가 없을 것 같아 미루고 있었는데, 그런 부분들을 아예 모아서 하나의 포스트로 올리는것도 나쁘지 않겟다는 생각이 들었습니다. 제가 최근에 고민했던 부분은 차별화에 관한 것이었습니다. 다른 탄막게임들하고 무엇을 다르게 만들고 싶은가? 일단, 제 게임의 경우에는 이전에 말씀드렸듯이 특정 조건에 따라서 이벤트가 오픈되어 엑스트라 페이지에 저장되도록 하는 기능을 구현해서 넣었지만,.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (8) - 몬스터를 관리하는 오브젝트 풀링! 안녕하세요! 윈디입니다. 최근에는 조금씩 시간을 내서 잡몹들을 만들어서 전반적인 스테이지를 만들고 있습니다.▲스테이지 매니저 스크립트에서 이전에 설명드렸던 iTween path 를 사용하여, 잡몹들이 나올 전반적인 위치나, 패턴을 관리하고 있죠. 그런데 저 움짤을 자세히 봐 주세요. 계속해서 똑같은 몬스터들이 나오는 상황입니다.이런 상황에서 굳이 저 잡몹들의 삭제/생성을 반복할 필요가 있을까요? 차라리, 미리 10개정도의 잡몹 오브젝트를 생성해 놓고 죽을 때마다 삭제가 아니라 비활성화시켜서 필요할 때마다 재활용한다면...?이라는 생각에, 오늘은 '오브젝트 풀링'을 사용해 보았습니다. 1. 오브젝트 풀링이란? 오브젝트 풀링이란, 사용이 끝난 객체를 삭제하지 않고 저장해 두었다가, 필요할 떄가 오면 다시 사.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (7) UI 만들기 - 상태와 점수 표시 안녕하세요, 윈디입니다.한동안 휴학 준비하고, 휴학동안 할 일을 구하느라 포스팅이 좀 늦었네요 ㅜ 시간이 부족하기도 했지만 정진하지 못한 제 탓입니다!앞으로는 좀더 열심히 자기계발을 하기 위해 노력해야 할 거 같습니다. 일이 끝나면 시간이 늦어서 그런지 자꾸 딴짓을 하게 되더군요.. 그래도 어찌어찌 시간을 내서, 기본적인 틀을 완성한 탄막 게임에 UI를 입히기로 했습니다. 보통 슈팅 게임을 보면, 왼쪽이나 오른쪽에 작게, 아니면 아예 틀을 하나 만들어서 그 위에 현재 점수나, 현재 목숨, 봄 등등 여러가지 정보를표시하게 되죠. 오늘 설명드릴 부분이 바로 그런 부분인데요, 간단하다면 정말 간단하지만, 실제로 해 보는 것과 아닌 것은 큰 차이가 있더라구요. ▲탄막 게임으로 정말 유명한 게임이죠, 동방프로젝트.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (6), 충돌, 그 불필요한 연산을 삭제하기. 연출을 사용하자! 안녕하세요! 윈디입니다.지난 시간에는 프레임 드랍을 해결하기 위해 프로파일러를 확인하고 문제점을 찾아서 해결하는 법을 공부해 보았는데요, 며칠 더 코드를 다듬다 보니, 이런 방법도 있다! 라는 것을 생각해 내서 새로이 포스트를 작성하게 되었습니다! 이 방법은 생각보다는 적용범위가 제한적인 방법이기에, 일반적인 방법이라기 보다는, 게임을 만드시다가 사용할 수 있는 꿀팁 정도로 생각하시면 될 거 같아요! 지난번에 사용했던 아이템 흡수를 예로 들어 볼게요. 충돌시간을 분산시킴으로서 어느정도 문제를 해결하는 듯 했으나.. 몇몇 상황에서는 (플레이어의 위치에 따라)아이템끼리 많이 겹칠 경우에 렉이 나게 되더라구요. 그래서 새로운 해결책을 생각해 보는 와중에 생각이 떠올랐습니다.일단 유저들이 게임 안에서 보는 것은.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (5), 프레임 드랍을 해결하기. 안녕하세요, 윈디입니다. 지난번에 탄 삭제를 하도록 만들때, 이벤트와 델리게이트를 사용해서 탄을 삭제하는 방법을 사용해서 탄을 한번에 삭제를 했었는데요,그 이후 저는, 탄을 삭제하고 아이템으로 변한 탄들이 플레이어에게 점수로 들어가는 식으로 구현을 했었습니다.이렇게 탄을 한 프레임에 모두 삭제를 하다보니까, 순간적으로 렉이 발생하더라구요.이 렉을 해결하기 위해서는 당연히 정확한 원인을 파악해야겠죠?유니티의 프로파일러를 돌려서 확인해 보았습니다. 프로파일러는 유니티의 Windows 메뉴에서 확인하실 수 있습니다. 단축키는 컨트롤+7 입니다.프로파일러를 킨 상태로 게임을 실행하면 자동으로 Cpu 사용량이 기록이 됩니다.그래서 보스를 죽이는 시점을 확인해 봤더니..이렇게 나왔습니다. 토탈 64퍼센트나 차지하는.. 더보기
유니티 (C#스크립팅) - 코루틴이 잘 안 돌아가는 경우들 정리 안녕하세요? 윈디입니다.유니티 내부에서 코루틴을 사용하다 보면, 코루틴이 잘 작동하지 않을 때가 종종 있습니다. 특히, 오브젝트가 삭제되거나 비활성화되거나, 혹은 스크립트 사이를 넘나들며 코루틴을 사용하다 보면, 코루틴이 잘 작동하지 않을 때가종종 발생하는데요, 그래도 미리 알아두고 사용하다 보면 이런 오류들을 최대한 피하거나, 아니면 오류를 발견했을때 재빨리 해결할 수 있겠다는 생각이 들어서 제가 이번 게임을 코딩하면서 접한 몇 가지 오류들을 정리해 봤습니다. 일단 코루틴을 사용하는 이유는 원하는 만큼 스크립트를 쉬게 하여 연산에 큰 이득을 얻기 때문인데요,코루틴의 개념 자체에 대해서는 여기에 포스팅 해 두었으니 참고해 보시는것도 좋을 것 같아요. http://linecode.tistory.com/9 .. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (4), Atan을 이용해서 2D에서 lookAt 함수 기능을 구현해보자. 안녕하세요! 윈디입니다. 오늘은 유니티에서 기본으로 제공하는 함수, LookAt에 대해서 이야기를 해보려고 해요.LookAt은 사실 3D게임을 제작할때는 정말로 유용한 함수죠, 원하는 곳을 바로 볼 수 있으니까요.하지만 , 2D에서는 잘 적용이 되지 않는데요,(아무래도 z축이 2D에서는 표시되지 않지만 실제로 존재하기 때문인 것 같습니다만.)그래서 저희는 어떤 오브젝트가 위치 a로의 방향을 알아내서 직접 볼 수 있는 LookAt2D() 함수를 한번 구현해 볼 겁니다. 사실상 2D에서 저희가 다뤄야할 시계방향, 반시계방향의 각도는 유니티에서는 Z축의 각도입니다.직접 2D화면에 오브젝트를 올려서 회전해 보시면 바로 알게 되실 거에요. 그렇다면 방향은 어떻게 돌릴까요? 해당 프레임 안에 돌리려면, transf.. 더보기