본문 바로가기

유니티 게임 개발하기

유니티 - 탄막 슈팅 게임을 만들자 (3), itween 사용하기 안녕하세요! 윈디입니다. 7월의 첫 글이네요~!단순히 개발일지라기 보다는 좀더 배운 내용을 잘 정리할 수 있도록 쓰고 싶어서,며칠 전부터 구현한것들 움짤만 만들어 놓고서, 어떻게 써야 할까... 고민을 해 봤습니다.새로 배운 내용들도 물론 많지만, 사실 이전에 배웠던 것들의 응용이 개발을 하는데에 있어서 더 중요한 것 같아요. 한번 잘 배우면 계속 쓰기도 하구요. 그래서 이번에는 우선 구현해둔 것들을 보시면서, 어떤 것들이 사용되었는지 설명을 해 드린 다음, 거기에서 중요한 것들을 설명 드리는 것이 좋겠다는 생각을 했습니다.특히 이번 주는 보스나 일반 몬스터들의 패턴과 이펙트를 구현하느라 꽤 많은 시간을 썼기 때문에, 그런 '움직임'을 다루는 방법들을 설명드리게 될 것 같습니다. 첫번째 움짤은 자연스럽게.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(2), 이벤트(Event)와 Delegate 의 사용 안녕하세요, 윈디입니다. 지난 시간에는 보스가 탄을 '쏘도록'만 만들었다면, 이제는 '탄 자체'가 언제 삭제될지에 대해서 생각을 해 봐야할 것 같습니다. 실제로 화면에서 사라져도, 총알은 삭제되지 않고 무한한 거리를 날아갑니다. 이것이 계속 메모리를 차지한다면, 엄청난 손해가 되겠죠. 프레임도 확 떨어질 거구요. 따라서,보스가 죽으면 총알도 사라져야 하겠죠? 어떻게 구현해야 할까요? 가장 단순하게 생각할 수 있는 것이, 게임 매니저등에서 태그로 총알들을 모두 검색하여,배열 안에 저장해서 한번에 모두 지워주는 클리어 함수를 만드는 것입니다. GameObject[] obj = GameObject.FindGameObjectsWithTag ("Bullet_E");// Bullet_E 태그를 가진 오브젝트를 모두.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(1), Sin(),Cos()과 Mathf 의 사용 안녕하세요, 윈디입니다!오늘은 처음으로 보스가 탄막을 뿜어내도록 만들었습니다.지난번의 보스 패턴 구현에서 연장선상이 되겠네요. 이러한 탄막을 구하기 위해, 구현해야 하는 두 가지의 파트를 먼저 살펴보겠습니다. 첫번째는, 탄막을 '쏘는' 보스에서 구현해야 할 부분. 두번째는, 탄 자체가 움직이거나, 혹은 시야 범위에서 사라진 탄이 삭제되기 위해 필요한'탄' 내부에서 구현해야 하는 부분이 있겠습니다. 탄을 쏘는 보스의 부분부터 살펴보도록 하지요.탄을 원하는 방식대로 쏘도록 코루틴을 만들어서, 원하는 타이밍에 실행해줄 수 있도록 하면 되니까요.저는 시작하는 시점에 저런 탄을 생성할 수 있도록, SpellStart() 코루틴을 만들었습니다. IEnumerator SpellStart() { float angle .. 더보기
유니티 - 스크립트 함수의 실행순서 (Awake와 OnEnable) 안녕하세요? 윈디입니다. 엑스트라 페이지를 만드느라 주말동안 코딩을 하면서 보냈네요. 다이얼로그컨트롤을 좀더 손봐서 배경화면도 바꿀 수 있도록 했습니다. 배경에 관련된 데이터를 채팅 스크립트에 추가하고 빈 png그림인 NULLIMAGE파일을 추가하여 앞으로 특별한 것이 없으면 널이미지를 적극적으로 사용하도록 조치를 했죠. 슬라이더와 유니티엔진에서 지원하는 Scroll Rect, 그리드 레이아웃을 사용하여 여러 버튼들을 엑스트라 페이지에 나열하고, 버튼을 누를때마다 해당 이벤트에 대한 다이얼로그가 생성되도록 했구요. 특히, 오늘 배운 것은 제가 이벤트를 저장하기 위해서 사용했던 방법에 있던 오류에 대한 것이었는데, ▲ 대화 이벤트를 구현하기 위해서 SetActive 함수를 많이 사용했습니다.대화를 저장한 .. 더보기
유니티(C#스크립팅) - 코루틴. 코루틴. Coroutine의 이해. 안녕하세요, 윈디입니다! 오늘은 코루틴의 개념에 대해서 좀더 자세하게 이해하게 되어서, 정리할 겸 글을 쓰게 되었네요.오늘 배운 내용으로 게임에 필요했던 메인 화면의 동작을 코루틴을 이용하여 제작해 보기도 했구요. 코루틴이란?Coroutine, 같이한다는 뜻의 접두사 Co와 작업을 뜻하는Routine의 합성어라고 할 수 있겠죠. 같이 하는 일. 그러니까 유니티에서 코루틴이란 간단히 말하자면 코루틴을 호출한 함수와 해당 코루틴이 같이 협동해서 문제를 해결하는 구문이란 뜻인 겁니다. 코루틴은 항상 실행되는 것이 아니라 필요한 상황에서만 발생시킬수 있다는 점에서 매 프레임 실행되는 Update문보다 훨씬 강력하고 효율적인 기능을 발생시킬 수 있죠. 간단히 생각해서, 유니티에서 사용하는 여러 스크립트의 많은 U.. 더보기
유니티 2D - 보스 패턴 구현 보스의 패턴을 만들어서 넣어두면 조건에 맞춰서 그걸 발동해주는 서랍 스크립트를 만들어 봤습니다. 스펠(패턴)레벨은 패턴을 여러개 넣을수록 늘어날 수 있고, 보스의 HP가 몇일 때 다음 스펠로 넘어갈지를 KeyHp 변수에서 지정하여 패턴의 전환이 가능합니다. 실제 스펠을 실험용으로 만들어 넣고 실험해본 결과 무리없이 돌아가는것을 확인했습니다. 실제로 보스는 한개가 아니라 여러개를 만들것이기 때문에, 나름의 모듈화를 시켜서 해당 프리팹을 호출하면 바로 보스로 기능할 수 있도록 구현했습니다. 실제 개발을 더 진행해봐야 알겟지만 아직까지는 정말 괜찮은 것 같아요. 다음은 스크립트 전체 내용입니다. GetChild() 함수 가 참 사용법이 쉽고 유용하다는게 느껴집니다.어떤 오브제인지 지정할 필요 없이 차일드화된 .. 더보기
유니티 2D UI - 대화창 구현하기! - SetSiblingIndex 와 이미지 순서 유니티 수업을 들으며 혼자서 진행하고 있는 프로젝트 입니다.2D슈팅게임이 목표엿는데요, 슈팅게임을 하다 보면 당연히 대화가 필요한 시점도 나오겠죠. 그래서 오늘은 한번 대화창을 제작해 보았습니다! ▲최종 결과물이라고 생각해 주시면 되겠습니다. (Gif 파일은 이상이 없는데 올리는 과정에서 뭔가 문제가 생기는지 화면이 자꾸 깨지네요) 1. 계획 세우기 단계. 대화창을 제작하기로 결정한 후, 대화창에 넣기로 한 필요 기능들은 다음과 같았습니다. ⓐ 사용할 때 해당 판넬이 앞으로 돌아나오며 하이라이트를 받도록 조정, 대화의 대상이 되는 1개 캐릭터만 제외하고 RGB컬러를 어둡게 맞춰주는 상태 (미세값 조정 예정 : RGB전부 대략 77정도가 적절해 보임) ⓑ 캐릭터 판넬은 1 판넬당 1캐릭터의 초상화를 표시하.. 더보기
유니티 -다른 스크립트에 쉽게 접근! ( static instance ) 싱글톤 패턴 스크립트 안에서 static instance를 선언하면 해당 오브젝트가 아닌 다른 오브젝트 안의 스크립트에서도 그 기능을 불러와 쓸 수 있죠! 한마디로, 설명하자면 한 개의 객체를 여러 군데에서 사용하기 위한 방법이 바로 이 Singleton 패턴이라고 할 수 있을 겁니다. 싱글톤 패턴은, 디자인 패턴 중에서도 굉장히 자주 쓰이는 패턴이죠, 굳이 유니티 뿐만 아니라 어디에서든 사용하기 좋고, 직관적인 편이에요. Singleton패턴을 사용하는 법은 다음과 같습니다! 오늘 배운 것의 요점은, 이걸 사용하려면 초기화를 거쳐줘야 한다는 거였습니다. 예를 들면.. public static GameMgr instance; //변수 선언부// void Awake(){ GameMgr.instance = this; /.. 더보기
유니티 2D -IsKinematic 옵션과 충돌에 대해서. (OnCollisionEnter) 2D슈팅 게임을 만드는 도중에, 새로운 사실을 알게 되어서 기록하기위해서 급하게 글을 쓰게 되었습니다!강체(Rigidbody) 에서 볼 수 있는 옵션인 IsKinematic 에 대해서인데요,예를들어 제가 다음과 같은 코드를 작성했다고 가정해 보죠. void OnCollsionEnter2D(Collsion2D other){ if(other.gameObject.CompareTag("Bullet_P")){Debug.Log (hp--);Destroy(other.gameObject);} if (hp < -0)Destroy (gameObject);}이 코드에서 일반적이라면 적에게 총알이 맞으면 총알이 사라지게 되어야겠죠.심지어 강체가 컴포넌트로 존재하지 않더라도, 컬라이더의 충돌을 감지하는 것이기 때문에 움직이는 .. 더보기
유니티 게임 개발하기 (4) - 캐릭터를 따라다니는 카메라를 만들자. 안녕하세요, 초보개발자 윈디입니다. 수업 리뷰를 못 올린지도 거의 2주가 넘어가 버렷네요.사실 계속 수업은 했는데, 제가 이해력이 달리는 고로 최대한 곱씹으면서, 공부를 해야지 간신히 어느 정도 리뷰가 가능한 거 같군요 ㅜㅠ 우선 쉽고 간단하게 이해할 수 있는 부분부터넓게, 유니티의 사용방법 위주로 공부와 리뷰를 진행하면서 점점 더 중요한 내용으로 나가는 것이 좋을것 같다는 생각이 듭니다. 그래서 오늘은 조금은 가벼운 내용입니다. 카메라에요. 지난 시간에 움직이는 캐릭터를 만들었으니, 오늘은 캐릭터를 따라다니는 카메라와, 화면 구석에서 작게 보이는 미니맵을 한번 만들어 보면서, 카메라의 여러가지 효과와 사용법에 대해서 한번 알아 보면 좋을 것 같습니다. 우선 저희는 메인 카메라가 캐릭터를 따라오도록 간단.. 더보기