본문 바로가기

유니티 게임 개발하기/2D 게임 개발일지

유니티 - 탄막 슈팅 게임을 만들자(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);}이 코드에서 일반적이라면 적에게 총알이 맞으면 총알이 사라지게 되어야겠죠.심지어 강체가 컴포넌트로 존재하지 않더라도, 컬라이더의 충돌을 감지하는 것이기 때문에 움직이는 .. 더보기