오버로드
·
Programming/ETC
오버로드 : 함수의 이름은 같지만 다른 역할을 하는 함수. 입력(매개변수의 개수, 자료형 등)이나 출력 중 하나라도 형태가 달라야 한다. int sum(int a, int b) { return a+b; } // 함수의 오버로딩 int sum(int a, int b, int c) { return a+b+c; } int main() { printf(sum(1,2)); printf(sum(1,2,3)); } 장점 1. 같은 이름으로 다양한 형태의 입력에 대응할 수 있다. 2. 내부 동작은 비슷한데 굳이 함수를 다른 이름으로 여러개로 나눌 필요가 없기 때문에 혼동을 줄일 수 있다.
인스턴스화
·
Game Development/Unity
인스턴스화 : 미리 만들어둔 오브젝트나 프리팹을 게임 도중에 필요한 만큼 실시간으로 찍어내는 것 ex) 총알, 몬스터 등 Instantiate(GameObject obj, Vector3 pos, Quaternion rot) obj 게임 오브젝트를 pos 위치에 rot 각도로 생성한다. public GameObject object; void Start() { Instantiate(object, transform.position, transform.rotation); } 이렇게 되면 해당 object에 해당하는 게임 오브젝트가 이 스크립트가 포함된 게임 오브젝트의 위치, 각도를 가지고 생성된다. 이때, 생성된 게임 오브젝트는 변수로도 할당이 가능하다 public GameObject object; void S..
회전과 쿼터니언
·
Game Development/Unity
유니티는 회전 처리를 하는데 쿼터니언(사원수)을 사용한다. 하지만 사원수는 어려운 개념이니 유니티를 사용하는 입장에서는 그렇구나... 하고 넘어가도록 하자. 관련 함수 및 기타 1. Quaternion.Euler(Vector3) : 이해가 쉬운 Vector3 값(진짜 벡터값이 아닌 형식)을 자동으로 Quaternion 값으로 변환해주는 함수. 반환값은 Quaternion. (x, y, z)와 같은 Vector3 형태를 인수로 입력한다. 형식은 벡터이지만 우리가 쓰는 각도를 의미한다. ex1) Quaternion rotation = Quaternion.Euler(10, 10, 10); ex2) Vector3 rot = new Vector3(10, 10, 10); Quaternion rotation = Qu..
평행이동과 좌표계 관련
·
Game Development/Unity
평행이동은 기본적으로 Local Space를 기준으로 이동 -> Space.Self, Space.World로 설정 Transform 컴포넌트의 위치와 각도는 Local Space & 부모를 기준으로 한다. (상대적임) * 속성(World Space, Local Space 순서) Position -> transform.position, transform.localPosition Rotation -> transform.rotation, transform.localRotation Scale -> transform.scale, transform.lossyScale
벡터
·
Game Development/Unity
유니티에서 벡터 => 물론 크기,방향을 나타내는 역할도 하지만 2개 이상의 원소를 표현하는 방식?으로도 사용 가능 ex) Vector2 (x,y) 2개 원소 , Vector3 (x,y,z) 3개 원소 , Vector4 (x,y,z,w) 4개 원소 ....... 등 현재 위치(점), 현재 위치로부터 상대적인 위치(화살표) 둘 다 응용 가능하다. * 목적지 -(빼기) 현재위치 => 두 점 간격(거리) 나의 위치 - 상대방 위치 = 간격 => 나의 벡터 - 상대방의 벡터 = 상대방에서 나로 연결되는 벡터, 도착점 - 시작점 = 시작점에서 도착점으로 가는 벡터 그냥 벡터 쓰면 대각선 길이에 루트2 곱해져서 값이 이상해질 수 있음 -> 단위벡터, 방향벡터, normalized 벡터(길이 1) 사용 * 방향벡터 :..
Time.deltaTime
·
Game Development/Unity
모든 컴퓨터들의 성능이 다르기 때문에 FPS도 다름. 그렇기 때문에 Update 함수는 한 프레임마다 실행되기 때문에 같은 시간이더라도 pc에 따라 실행되는 횟수가 다르다. 이때 이런 문제를 해결하기 위해 Time.deltaTime을 이용 Time.deltaTime은 한 프레임의 시간을 반환 ex) 60프레임 => 1/60초, 144프레임 => 1/144초 예를 들어 1초동안 1m를 움직이는 스크립트를 작성하려고 한다. 이때, FPS가 60과 144인 경우를 살펴보자 i) 60의 경우 만약 Time.deltaTime을 쓰지 않고, Update 함수에서 한 프레임 당 1m를 이동하게 시킨다면, 1초 동안 60m를 이동할 것 => 1m * 60 해결방법 1m를 1초 동안 깜박이는 횟수인 60으로 나눠주면 1..
Call by Reference, Call by Value, Call by Address
·
Programming/ETC
함수 호출 시에 인수를 전달하는 방법들 1. Call by Reference or Call by Address (둘 사이에 차이점은 있음) 함수로 원본 변수가 바로 전달되는 방식. 포인터를 통해 인수로 주소값을 전달하면, 함수의 매개변수의 값을 변경할 때 원본 함수도 영향을 받게 된다. 2. Call by Value 함수의 인수로 받은 값을 함수의 매개변수로 복사한다. 이때 함수의 인수가 변수라면, 함수의 인수와 함수의 매개변수는 서로 다른 메모리 공간을 사용하므로 함수 내에서 아무리 매개변수의 값을 변경하더라도 인수로 전달된 원본 변수에는 아무런 영향을 주지 않는다.
메시지와 브로드캐스팅
·
Game Development/Unity
메시지 : 보내는 쪽, 받는 쪽 둘 다 상관 x, 메시지 내용에 해당하지 않으면 메시지를 무시 브로드캐스팅 : 메시지를 무차별적으로 모든 게임 오브젝트들에게 뿌리는 것 * 유니티 이벤트 메서드 : 이름만 맞춰 구현하면, 해당 타이밍에 자동으로 실행 ex) Start, OnTriggerEnter, Update 등 이 때문에 유니티의 컴포넌트들은 서로 계속해서 참조할 필요 없이 간결하게 코드 작성 가능
snwdaaa
'분류 전체보기' 카테고리의 글 목록 (4 Page)