출처 : https://www.youtube.com/watch?v=cSwB2brGVPY - 오지현 Evangelist 요약 Transform 변경은 유니티 엔진을 구성하는 C++ 레이어에 메세지를 보낸다 이는 성능에 악영향을 끼친다. 최적화 방법으로는 1. SetPositionAndRotation을 사용하자2. Optimize Game Objects 옵션을 활성화 시켜주자 본문 Transform은 모든 게임 오브젝트에 존재합니다. 이 Transform이 변경이 되면 c++로 이루어진 유니티 엔진 내부에 'OnTransformChanged' 라는 메세지를 보냅니다. 대부분의 경우 게임 오브젝트는 부모 자식 관계를 갖는 계층 구조를 갖게됩니다. 부모의 Transform이 변경이될 경우 자식의 모든 Trans..
출처 : https://www.youtube.com/watch?v=qwQ16sS8FSs 1. 옵저버 패턴 옵저버 패턴은 특정 객체(Subject)의 상태 변화에 따라 특정 객체와 연결된 다른 객체들(Observer)이 영향을 받는 1 : N 관계이다. 옵저버 패턴은 Observer, Subject 두 종류로 나뉘는데 Observer는 Subject의 상태 변화를 관찰하는 객체이며 Subject는 Observer에게 상태 변화를 알리는 객체이다.옵저버 패턴을 사용하는 이유로는 결합도를 낮추고 응집도를 높여 객체지향적인 프로그래밍을 하기 위해서이다. 특정 객체(Subject)의 상태 변화에 따라 영향을 받는 다른 객체들(Observer)이 무수히 많다면 특정 객체에는 다른 객체들의 정보가 무수히 필요하게되며..
싱글톤 패턴은 하나의 인스턴스에 전역적인 접근을 시키며 보통 호출될 때 인스턴스화 되므로 사용하지 않는다면 생성되지도 않습니다.유니티에서 싱글톤 패턴은 매니저 클래스와 같이 여러 클래스에서 같은 인스턴스에 접근이 가능해야 하는 경우에 사용됩니다.어디서나 접근할 수 있다는 매우 편리한 장점이 있지만 이 장점 덕분에 결합도가 높아지는 결과가 생길 수 있으므로 주의하면서 사용해야 됩니다.유니티에서의 싱글톤 패턴의 구현은 매우 다향한 방법이 있어 자신에게 맞는 방법을 택하면 좋을 것 같습니다. 아래에 몇 가지 구현 방법을 적어놓았습니다. 1. Awake 에서 초기화 하는 방법 12345678910111213141516using UnityEngine; public class SingletonAwake : Mono..
C# 에서 편리한 기능으로 Delegate 가 있습니다. 비슷한 개념으로는 함수 포인터가 있습니다. Delegate의 여러가지 사용법이 있겠지만 오늘 사용해 본 것은 무엇을 할 것인가 (What)인 함수를 어떻게 할 것인가(How)로 Delegate를 통해 구현해 보았습니다. 1. 트리의 모든 노드를 탐색한다. 트리의 모든 노드를 탐색하기 위하여 재귀함수를 사용했습니다. 루트에서 탐색을 시작하여 루트의 하위 요소가 다른 노드의 부모일 경우 다시 함수를 호출하는 방식으로 트리의 모든 노드를 탐색하였습니다. 무엇을 할 것인가? 모든 트리의 노드를 탐색한다 라는 What의 관점에서 작성된 코드입니다. 소스코드 12345678910 private void TreeExplorer(TagData root) { fo..
1. IEnumerator 구현 소스코드123456789101112131415161718192021222324using System.Collections;using UnityEngine;public class UseIEnumerator : IEnumerator { public object Current { get { return null; } } public bool MoveNext() { return !Input.GetKey(KeyCode.Space); } public void Reset() { } } Colored by Color Scriptercs 123456789101112131415161718192021using System.Collections;using UnityEngine; public c..
1. if 사용 소스코드12345678910111213141516171819202122232425262728293031323334353637using UnityEngine; public class UseIf : MonoBehaviour { // Update is called once per frame void Update () { if(Input.GetKeyDown(KeyCode.A)) { KeyDown_A(); } if(Input.GetKeyDown(KeyCode.B)) { KeyDown_B(); } if(Input.GetKeyDown(KeyCode.C)) { KeyDown_C(); } } private void KeyDown_A() { Debug.Log("A"); } private void KeyDo..
EnemyAttack02 1234567891011121314151617181920212223242526272829using System.Collections;using System.Collections.Generic;using UnityEngine; public class EnemyAttack02 : MonoBehaviour { public PlayerHealth02 playerHealth; public int damage = 10; public float attackDelay = 0.5f; private float timer = 0; // Update is called once per frame void Update () { timer -= Time.deltaTime; } private void OnC..
소스코드 출처https://github.com/gportelli/UnityScreenResolutionManager/blob/master/Assets/ScreenResolutionManager/AspectUtility.cs 다양한 화면 비율의 문제와 래터박스 다양한 화면 비율에 맞춰 게임을 각각 개발하는 것은 매우 어렵고도 힘든 일입니다.하지만 화면 비율을 무시하고 게임을 개발하게 된다면 게임 플레이어들은 개발자가 의도하지 않은 상황에 처할 수 있으며 극단적으로는 게임을 플레이할 수 없게 되기도 합니다. 이러한 문제를 해결하기 위한 방법중 간단한 방법으로 래터박스가 있습니다. 대표적인 몇 가지 화면 비율로 개발한 뒤 그 외의 화면 비율에는 래터박스를 채워 화면 비율을 맞추는 방법입니다. 유니티에서 래터박..
12345678910111213141516171819using System; namespace Str{ class Program { static void Main(string[] args) { var First = "firstStr"; var Second = "secondStr"; var format = $"First = {First}, Second = {Second}"; var format2 = String.Format("First = {0}, Second = {1}",First, Second); Console.WriteLine(format + "\n" + format2); } }} Colored by Color Scriptercs format 과 format2 는 같은 코드이다. c# 6.0 이후 부..