- Today
- Total
목록Unity (90)
프로그래밍 농장
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cSJC7y/btrGY2cpUJN/fB9ZYUEIVaKCCVVK6rxgdk/img.png)
- Delegate? : 대행하다 : 어떠한 기능을 목록에 추가해놓으면 여러분들의 기능을 대신 수행시켜준다. -> Delegate에 사용자가 수행시킬 기능 (함수. . )들을 리스트형식으로 넣어두고, 이를 델리게이트가 대신 수행시켜주는 방식이다. -> 이때는 포인터형식으로 내장되어있기에, 함수들의 주소값이 있다고 보면된다. 아래와 같이 delegate 를 구현해놓은 함수와 같은 타입과 인자형식으로 만들어놓으면, Start() 에서 그냥 기존 함수를 대입만 해주면 된다. 왜 사용할까? 버튼이 눌리면 아바타에 옷을 입힌다 👉 무기를 들게 한다. 👉 랜덤 메세지를 출력한다. 이런 과정들이 순차적으로 실행되게 하고 싶다면 버튼 눌리는 함수 내부에 각각의 기능들을 함수로 직접 실행시키면 되겠다. 즉 ButtonP..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/86ufX/btrG2s9qSod/uEct89EAKbWDnNcRe8q5uK/img.png)
이번글에서는 이벤트와 델리게이트를 사용하기 쉽게 유니티가 wrapping 해 놓은 오브젝트인 유니티 이벤트에 대해서 알아보자. - 이벤트? : 사건이 발생되면 그 사건에 등록을 해놓은 기능들이 자동으로 같이 발동되는것 -> 이때 이벤트를 발생시키는쪽, 그 이벤트에 기능을 등록해놓은 오브젝트들 서로가 전혀 연계되어있지않다 -> 이로써 스파게티처럼 코드가 엮이는 불상사가 없어진다. 예를 들어 플레이어가 사망함과 동시에 -> 사망했다는 UI / 도전과제 unlock / . . 과 같은 다양한 기능을 깔끔하게 수행하고 싶다고 가정해보자. 위와 같이 PlayerAsset에 collider를 주어 아래 용암에 닿으면 console log에 죽었다는 알림과 함께 PlayerAsset을 삭제하고싶다. 당연하게도 Pla..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/N5Ppy/btrG3lhsH7a/TeEfczgQOJBvyxt1sPm4OK/img.png)
Property(프로퍼티)는 일반적으로 변수와 같이 사용하지만 사실 내부에는 특정한 함수처리를 끼워넣을수있다. 바깥에서보면 변수처럼 사용하지만, 실제로는 특수한 처리를 끼워넣을수있는 기능이다. -> 이를 통하여 변수로 값을 선언 또는 외부에서의 덮어씌우는 등의 실수나 임의변경하는 상황을 방지할 수 있다. 아래의 예시를 보자. -> 위와 같은 문제가 발생하지않도록 값의 참조 (get)만을 가능하도록 프로퍼티의 특성을 활용하여 아래와 같이 설정할 수 있다. 아래와 같이 pointManager.point의 값을 -100으로 임의로 변경하고 deblog.log를 돌려보자. 아래와 같이 public int m_point 라는 private 변수를 클래스 내에 하나 만든후, point 변수는 get{},set{} ..
오버라이드란, 부모에서 만든 기능을 상속받은 자식에서 마음대로 덮어씌울수 있는것이다. 자식에서 오버라이드를 할때, 변수명(메서드명)과 타입은 동일해야한다. 아래의 예시를 참고하자. ublic class BaseRotator : MonoBehaviour { public float speed = 60f; void Update() { Rotate(); } //자식들만 접근가능 //virtual : 자식들이 이를 덮어씌울수있음 (대체가능) protected virtual void Rotate() { transform.Rotate(speed * Time.deltaTime, 0, 0); } } 위의 부모클래스 BaseRotator는 virtual이 붙은 protected 접근제어자의 Rotate() 라는 함수를 가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/O2fEq/btrGLhfZ9ma/Su81WGbBplgDkuJWcj8C91/img.png)
코루틴 : 처리와 처리 사이에 대기를 삽입할 수 있으며, 또한 여러처리를 순차적이 아닌, 동시(병렬)로 수행할 수 있다. Unity에서 예를 들면, Fade-in / Fade-out 방식의 화면이 점차 어두워지면 전환되는 기능을 구현하기 위해서는 코루틴이 필수적이다. 아래와 같이 FadeImage의 alpha값을 for문을 돌려 0까지 낮추어준다 할때, for문에 대기를 주지 않는다면 시작과 동시에 alpha값이 0이되어 확인할 수 없을것이다. 이때 대기를 주기위해 코루틴을 사용할 수 있다. 일반적인 함수는 함수가 발동이 되었을떄, 첫번째-> 마지막 라인까지 도달해야지 종료된다. 반면 코루틴은 ienumerate라는 타입을 반환하는 함수로서 사용하게 된다. IEnemerator Coroutine(){ /..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sbsjW/btrGKR1vdd3/JlArTIpK32cKeg4tJIgB1K/img.png)
싱글톤 패턴은 '디자인 패턴' 중 하나이다. 디자인 패턴이란, 프로그래밍을 할 때 코드를 작성하는 약속된 방법이다. 싱글톤은 기본적으로 게임이나 메모리 상에 단하나만 존재하며, 언제 어디서든 접근가능한 오브젝트를 만들 때 사용되는 패턴이다. ex) 게임 상의 ScoreManger는 하나만 존재하여야하며, 모든 플레이어들이 언제나 접근가능하도록 설정하여야 할 것이다. 위와 같이 한 게임상에서는 다양한 Score 관련 스크립트, 함수들이 존재할것이다. 또한 Score를 관리하는 ScoreManager는 게임상에 하나뿐이다. 바로 이때 위와 같이 Score에 영향을 미치는 함수들의 Script를 때마다 ScoreManager에 참조시켜서 사용하는것이 아니라, 싱글톤 패턴을 사용하면 된다. -> 자기자신(Sco..