728x90
반응형

unity 77

FSM,유한 상태 기계, Finite State Machines [Unity]

무슨 기계공학과에서 배우는 단어 같이 생겼다. 아니면 무슨 고체전자물리처럼 Solid State Physics 같이 무슨 State가 들어간다. 맞다.. 회로 꾸밀 때 나는 swtich문 많이 썼던 것 같기도 하고.. Mealy, Moore 했었는데 다 까먹은듯 데헿 하지만 여기서는 프로그래밍 스타일, 패턴 중에 하나로 알아볼 만한 가치가 있다. 그래서 알아보기로 했다. FSM의 간단하게 정의를 하고 가자. 각 State가 유한하게 있고 State를 전이시키기 위한 조건이 있다. 그것을 표현하는 방법이라고 말할 수 있다. 그럼 게임 개발에서 FSM의 가지는 의미는 무엇이냐? “finite State Machine is a structure that allows to define complex behavi..

제너릭, Generics [Unity]

cpp의 템플릿과 비슷하다고 보면 된다. 제너릭을 구현하는 경우는 내 경험이 부족해 아직 많이 못봤지만 제너릭을 가져다 쓰는 것이 보통이다. 알아보자 제너릭은 일반적으로 다양한 데이터 타입으로 같은 기능을 수행하게 하는 것이다. 어차피 기능이 같을 거라면.. 정수형, 문자열, 실수형...을 일일이 지정해주는 것은 정말 힘들다. 그래서 무슨 타입이든.. 받을 수 있게 하였는데 예를 들어보자 using UnityEngine; using System.Collections; public class SomeClass { //여기 원래 자료형이 들어가는 자리에 T라는 것이 들어가있고 //메서드 뒤에 라는 것이 나왔다. T는 어떤 자료형으로도 인식된다. //그래서 정수형, 실수형을 넣어도 알아서 인식이 된다. pub..

Method Overloading, 메서드 오버로딩 [Unity]

오버로드하면 맨날 스타크래프트가 생각난다. Overload라서.. 조금 다르지만 그래서 이걸 알아보려고 한다. 왜냐?? 맨날 Unity에서 메서드를 사용하면 자꾸 옆에 + overloaded +3 막 이런게 뜬다. 그래서 알아보기로 하였다. 원래 메서드는 유일하게 존재한다. 동일한 것이 존재하면 중복되어 오류가 생긴다. 그러나 Method Overloading이 그것을 피하게 해준다. 피하게 해준다는 뜻이. 중복되는 내용을 써도 된다! 가 아니라 이름만 같을뿐 다른 기능을 한다는 의미로 받아들여야 한다. 예시를 보자 using UnityEngine; using System.Collections; public class SomeClass { //당연히 더하는 메서드다. 정수를 // 인자로는 정수 2개를 받..

유니티에서 Static이란 [Unity]

static.. Dynamic의 반대로 알고 있다. 정적을 의미한다. 즉, 런타임 이전에 훨씬 이전에 수행되어 만들어진다는 뜻으로 알고 있다. 사실 선언했을 때 만들어진다. ** 메모리에서의 Data에 저장된다. 그럼 유니티에서 Static의 의미를 알아보자 static은 Data 영역에 저장되기 때문에 변수를 수정하거나, 읽을 때, 클래스 객체를 만들 필요가 없다. 아무리 객체를 만들더라도 static은 유일하게 존재한다. using UnityEngine; using System.Collections; public class Enemy { //Static variables 은 모든 클래스의 인스턴스와 공유된다. public static int enemyCount = 0; public Enemy() { ..

C#에서의 삼항 연산자 Ternary Operator [Unity]

많이 쓰려면 많이 쓸 수 있지만 몰라서 못쓰는 경우가 더 많은 것 같아서 알아보았다. if, else문을 하나로 합쳐서 쓰는 것과 비슷하다. "Boolean expression" + ? + "True, value" : "False, value" 만약 이렇게 쓰지 않는다면 if (Boolean condition){ "참일 때 값" } else{ "거짓일 때 값" } 이렇게 되었을 것이다. 직관적으로 이해하기 쉽게 도와주는 연산자이다. using UnityEngine; using System.Collections; public class TernaryOperator : MonoBehaviour { void Start () { int health = 10; string message; //This is an ..

Linear Interpolation, 선형 보간법

이 방법을 이전에 오브젝트를 움직이게 할 때 써먹었다. 하지만 움직이게 하는 것 뿐만 아니라 모든 것에 쓸 수 있기에 한 번 더 복습하고 가려고 한다. 알아보자 어떠한 value 2개를 가지고 그 사이를 선형보간법을 이용하는 것이다. Lerp (X, Y, t) 함수의 원형은 이렇게 생겼다. X,Y 가 value가 되는 것이고 t가 0~1 의 값을 가진다. ?? 뭐야 보간이 뭔데? 보간이란 알고 있는 값으로, 알려진 값 2개의 사이에 위치한 값을 추정하는 것을 말한다. 즉, 알고 있는 값으로 근사 함수를 만들어 값을 추정하는 것이다. 아래와 같은 식으로 추정한다. 그럼 t는 왜필요한건데?? t가 d1,d2값을 정해준다. x1,x2의 거리를 1로 보고 t가 비율을 정하는 것이다. 쉽게 말하면 그라데이션의 중..

Start()와 Awake()의 차이 [Unity]

1. Awake() Awake()는 일반적으로 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출된다. 즉, start보다 먼저 호출된다. 다행히 모든 오브젝트가 초기화되고 호출되기 때문에 GameObject.FindWithTag를 이용해서 해당 게임 오브젝트를 요청하거나, 다른 오브젝트와 안전하게 연동해서 사용할 수 있다. 즉, 초기화시키기에 이렇게 알맞은 것이 없다. **단, 각 게임오브젝트의 Awake()는 랜덤 순서로 실행되기 때문에 스크립트간의 참조(reference)를 설정하기 위해 Awake를 사용하고, 정보를 보내고 받는 경우에는 Start를 사용해야 한다. 2. Start() Start()는 Update메소드가 처음 호출되기 바로 전에 호출되고 해당 Behaviour..

C#에서 쓰이는 약간 다른 Loop 활용 [Unity]

For, While은 어디서 한 번쯤 들어봤을 것이다. 하지만 각 언어마다 특징이 있듯이 C#에도 약간 좀 다른 특징이 있다. 알아보자 1. Do, While 문 using UnityEngine; using System.Collections; public class DoWhileLoop : MonoBehaviour { void Start() { bool shouldContinue = false; do { print ("Hello World"); }while(shouldContinue == true); } } 일반적으로 While문을 돌릴 때 행동하기 전에 조건이 True인지 체크를 하는데 얘는 우선 돌리고 True인지 체크를 한다. 예를 들면 설거지를 하고 있는데 남은 접시가 0보다 크면 설거지를 해야한..

Collider에 대한 모든 것(기본) [Unity]

이번 글에서는 Collider의 종류와 쓰임 보다는 Collider가 무슨 역할을 하며 왜 필요한지.. 어떤 property를 가지고 있는지를 알아볼 것이다. 도대체 무엇인가? ++Unity.Engine 클래스에 포함되어 있다. RigidBody가 나온다면 항상 따라오는 것이 있다. 바로 Collider다 ++영어단어 뜻이 Collide with, 으로 많이 쓰이듯이 "충돌"을 의미한다. 즉, 충돌에 대해, 접촉에 대해, 모든 것을 관리한다고 볼 수 있다. 다시 말해서 물리적인 상호작용에 관여한다고 보면 된다. 어떤 속성을 가지고 있는데?? 그냥 충돌하면 그게 끝 아니야?? 사실 우리가 당연하게 여기는 모든 행동 안에는 물리적인 법칙이 끊임없이 적용되고 있다. 유니티는 조금이라도 자연스럽게 만들고자 여러..

용어 정리

Real-Time (실시간) how quickly an image is rendered (or displayed) on the screen. 얼마나 이미지들이 실제로 보는 화면(스크린)에 빨리 반영되느냐? 를 말한다. 스타크래프트 같이 RTS라는 실시간 전략 시뮬레이션 게임 장르가 있다. 얘는 우리가 우클릭만 하면 유닛들이 바로바로 움직여서 화면에 움직이는 것을 알 수 있다. 그렇다면 개발자 입장에서 실시간은 무엇이냐? 게임을 업데이트할 때 업데이트에 이상이 있거나 잘 작동하는지 알아보려면 우리는 실행시켜서 확인을 해봐야 한다. 하지만 그 작업을 맨날 처음부터 우리가 수정했던 부분까지 확인하려면 시간이 정말 오래걸린다. (실제로 지금도 그렇게 하고는 있지만 컴퓨터 속도가 빨라졌다.) 그렇게 빨라져서 수정..

728x90
반응형