728x90
반응형

유니티 72

UI, 유저인터페이스 기본 - 2 Text, Image, Responsive UI [Unity]

UI에 관한 기본적인 배경지식으로 이제 진짜 UI를 다뤄볼 것이다. 다룰 내용은..? 이 정도? 알아보자 먼저 텍스트와 스프라이트, 이미지부터 알아보자 UI 오브젝트 중 Text를 만들자. Text는 Inspector 창에서 글꼴, 크기, 스타일, 색, 배열 등 많은 것들을 바꿀 수 있다. 특히 여기서 Best Fit으로 최소 크기와 최대 크기를 정해주면 텍스트 사이즈에 따라 변화하게 만들 수 있다. -> 스크린에 따라 글자 크기를 바꿀 수 있다는 말이다. 글자에는 효과도 줄 수 있는데 대표적인 것이 Shodow, 그림자다. 다른 것도 Effect 컴포넌트에 가보면 있다. 그리고 만약 우리가 가지고 있는 Canvas 크기가 작아서 글씨가 선명하지 않고 계단현상, 안티앨리어싱 문제가 발생하면 이를 선명하게..

UI, 유저인터페이스 기본 - 1 [Unity]

인터페이스하면 그냥 사용자와 컴퓨터 간의 상호작용을 할 수 있다는 감이 온다. 이건 오랜 시간 게임에 몸을 담고 있다면 느껴지는 감이다. 자세히 알아보자 먼저 자주 쓰이는 용어를 정의해보자 UI와 HUD란 것이 있다. UI, User Interface 의 사전적의미는 사람과 컴퓨터같은 기계장치 간의 상호 작용을 하는 설계,design 를 말한다. 이 상호작용이 목적은 기계장치의 올바른 작동이나 효율적인 작동을 하기 위함이며 동시에 피드백을 줄 수 있어서 사용자의 의사 결정을 돕는다. HUD는 Head-Up Display로 게임 안에서 상태창, 점수와 같이 플레이어가 직접 건드리지는 못하지만 게임의 UI라고 볼 수 있는 것을 말한다. **우리가 점수를 얻을 수는 있어도 조작은 못하는 것처럼 그런데 UI가 ..

Handling Event, 이벤트 활용하기 - 3, 옵저버패턴, Observer Pattern [Unity]

우리가 왜 이벤트를 활용해보았을까. 바로 옵저버 패턴이란 것을 익혀보기 위함이었다. 옵저버 패턴은 어떤 때에 쓰일까?? 다수의 클래스가 하나의 이벤트에 대해 무엇인가 해야할 때 쓰인다. 이전 글에서 플레이어가 죽거나, 적이 죽을 때처럼 많은 곳에서 참조할 때?? 그정도? 알아보자 옵저버 패턴은 이런 식으로 진행된다. 하지만 모든 Observer마다 Notify를 하긴 귀찮기에 인터페이스를 이용하기도 한다. 이번에는 목숨이 다 소모되어서 게임이 끝났을 때를 가정해보자 게임 상에 남은 Enemy와 아이템은 없어지고 점수는 0으로 초기화되고 GAME OVER 문구가 떠야한다. 여기서 옵저버 패턴을 한 번 써보자. 그럼 인터페이스 만들어보자 이제는 Subject에 Private으로 Observer 리스트 만들고..

Handling Event, 이벤트 활용하기 - 2 [Unity]

이어서 이벤트를 활용해보자 이전 글과 이어진다. 이번에는 Enemy가 죽으면 해당하는 점수를 인터페이스 보여주려고 한다. 여기선 HUD, Head Up Display로 나타난다. 총알을 맞으면 어떻게 되는지 보자 private void OnCollisionEnter2D(Collision2D collision) { Destroy(collision.gameObject); GameObject xPlosion = Instantiate(explosion, transform.position, Quaternion.identity); xPlosion.transform.localScale = new Vector2(2, 2); Destroy(gameObject); } 이번에도 이벤트를 이용하고 싶다. 이번엔 이런 식으로 ..

Handling Event, 이벤트 활용하기 [Unity]

이벤트를 배워놓고 어디다 써먹는지 몰랐다. 이제 왜 이벤트를 써야하는지 알아 볼 차례다. 알아보자 문제 상황 플레이어가 총을 쏘는데 총알이 스크린을 벗어나거나 적에게 맞지 않는다면 총알을 쏠 수 없게 만들고 싶다. 즉, 총알을 쏘는 속도를 제어하고 싶다는 말이다. 그래서 생각해낸 생각이 아래와 같다. 플레이어 스크립트에서 Disable, 과 Enable로 총을 쏠 수 있게 하고 총알 자체에서 스크린 밖으로 벗어난 것을 감지하면 그것을 플레이어에게 알려줌으로 Scene에 활성화 된 총알을 하나만 만들려고 한다. 여기 플레이어의 스크립트가 있다. 그렇게 구현하고자 한다면 #region Projectile Management public void EnableProjectile() { projectileEnab..

이벤트, Events [Unity]

이벤트하면 뭐 경험치 2배, 선물 주는 것 생각이 나는 여기선 그건 아니고 정말 이벤트다. 사건이라고... 해석하기보다 그냥 Event로 받아들이자. 알아보자 정의해보자 어떤 이벤트가 일어났으면 설정해놓은 메서드를 불러와서 실행시킨다. delegate에 메서드를 담아서 실행시키는 것과 비슷한 원리다. 다만 Event는 static으로 선언되어 객체없이도 어디서나 접근할 수 있게해놓는 것이다. 그렇게 이용한다고 한다. public delegate void ClickAction(); public static event ClickAction OnClicked; 이런 식으로 선언한다. delegate으로 먼저 선언해준다. 그 후 event 키워드를 사용하여 메서드를 써준다. ** static으로 설정하지 않아도..

델리게이트, Delegates [Unity]

델리게이트?? 뭔가 했다. 아직도 뭔가 하는 것 같다. 알아보자 우선 정의해보자 Delagate는 도대체 뭐하는 앤가? delegate 해석하면 "대신 ~해준다" 정도로 해석된다. 뭘 대신해준다는 것일까? Container for similar functions (or methods)다. 다시말해서 메서드를 참조해준다. 우리는 변수를 선언해서 값을 담을 수 있지만 메서드를 담을 수 있는 변수는 없다. delegate는 메서드를 담아준다. delegate void firstdelegate(); firstdelegate = hello(); public void hello() { print("Hello!"); } hello라는 메서드를 firstdelegate가 참조한다. 어떻게 사용하느냐? 1. delega..

Coroutine,코루틴(IEnumerator, StartCoroutine, yield 등 )에 대한 모든 것 [Unity]

모든 것을 자세히 알기 전에 코루틴(Coroutine)이라는 것에 대해서 알고 가야 한다. A coroutine is a function that can suspend its execution (yield) until the given YieldInstruction finishes. 쉽게 말하면 잠시 ~할 시간을 준다. 다시 말해서 Interval을 준다. YieldInstruction이 끝날 때까지 Interval을 주는 것이다. 근데 왜 쓰느냐? 우선 대표적으로는 Single function임에도 시간이 오래걸리는 함수를 실행한다면 그 실행동안은 게임이 frozen 된 것 같이 보이겠지? 그래서 코루틴으로 그것을 해결할 수 있고 또한 Timer같이 일정 시간 이후에 쓰이게 할 수 있다. 코루틴(Cor..

싱글톤의 특징, Singleton [Unity]

뭔가 소스를 작성하다 보면 어디서든지 접근할 수 있는 하나의 인스턴스만 있는 그런 경우가 있다. ** 예를 들면 데이터를 담당하는 오브젝트같이 하나의 인스턴스만 필요로 하는 Control Class 혹은 Manager Class를 만들어야 하는 일이 발생한다. 그럴 땐 거의 싱글톤 패턴이나, 정적 클래스로 많이 제작을 한다. -> 이전의 글에서 데이터를 다룰 땐, 정적 클래스로 접근했다. 그러나 싱글톤 패턴과 정적 클래스를 섞어서 쓰면 코드가 더러워진다. 그래서 차이를 알고 적절히 써야한다. 그래서 오늘 이 글을 쓴다. 알아보자 **Unity는 C#을 언어로 쓰지만 싱글톤 사용 시 방식이 조금 다르다. 일반 C#에서는 기본 생성자를 사용하지 못하게 private으로 막아야 한다. 유니티에서는 Monobe..

Namespace, 네임스페이스 [Unity]

모든 언어들에게 있는 외부 라이브러리, 툴 같이 필요한 것들을 불러오는 것. 엄청나게 많은 것들 중에 무엇을 가져올지 모른다. C#에서는 네임스페이스가 해결해준다. 알아보자 정의부터하자 네임스페이스란 클래스를 구분하기 위한 이름표 같은 것이다. C#이 기반으로 있는 닷넷프레임워크에는 수많은 클래스가 있는데 클래스 간의 충돌을 막고 사용자의 편의성을 위해 네임스페이스를 정의했다. 극단적으로 예를 들어 문자열을 add 하는 함수랑 숫자를 add 하는 함수랑 이름이 Add로 같을 수도 있잖아..? Add()이렇게 쓰면..되겠냐고... ++ 사실 오버로드(Overload)가 되어서 파라미터마다 다르게 적용되겠지만 아무튼 그래서 다른 이름표인 네임스페이스를 붙이는 것이다. **사실 클래스는 네임스페이스가 붙어야 ..

728x90
반응형