CS 질문 정리

알감자·2022년 6월 3일
0

게임공부

목록 보기
16/22

c++

1. virtual 함수란?

virtual 키워드를 추가하면 컴퓨터는 런타임 시에 적절한 함수를 찾아서 실행하게 된다.

virtual 키워드가 붙은 함수를 가상 함수(virtual function)이라고 한다.

그리고 파생 클래스에서의 함수가 기본 클래스의 가상 함수를 오버라이드(override) 하려면 두 함수의 꼴이 완전히 동일해야 한다.

출처 : https://junstar92.tistory.com/177


  • 클래스에 virtual 함수를 선언하면 vtable이 생성된다.

  • 클래스의 virtual 함수들은 이 vtable에 매핑이 됨.

  • 자식 클래스가 부모 클래스의 virtual 함수를 오버라이딩하면 자식 클래스의 vtable에 오버라이딩 함수가 매핑 된다.

  • 다형성을 사용하여 자식 클래스가 부모 클래스로 형변환이 되었을경우, virtual로 선언된 함수들은 vtable에서 가져오기 때문에 자식 클래스가 오버라이딩한 함수를 제대로 호출할 수 있게 된다.


2. 소멸자에 virtual을 쓰는 이유

  • 다형성을 사용하여 자식 클래스가 부모 클래스로 형변환을 하고 삭제를 한 경우, virtual로 소멸자를 선언하지 않았다면 vtable을 참조하지 않고 부모의 소멸자만 호출하게 된다.

  • 이런 경우 만약 자식 클래스에서 메모리를 추가 할당한 경우 메모리 누수가 발생한다.


3. 포함과 상속의 차이점을 설명

  • 파생 클래스가 부모 클래스와 is-a 관계가 성립할 때는 상속

  • 클래스 2개가 has-a 관계가 성립할 때는 포함

  • is-a 관계가 성립하지 않음에도 단지 편의 때문에 상속을 남발해서는 안된다.

  • is-a : 상속을 기반으로 함. ex) Apple은 과일의 일종

  • has-a : 하나의 객체가 다른 객체를 가지고 있는 관계. ex) Car에는 Engine이 있다.


4. 메모리 단편화를 해결할 수 있는 기법들

  • External Fragmentation의 해결방안

    • 1) Storage Compaction (압축)
      : 주기적으로 삭제 공간을 회수하여 메모리 공간들을 정리하는 방식.
      비용이 많이 들어 자주 쓸 수 없는 것이 단점.
      주로 정해진 주기에 따라서 실행됨.

    • 2) Coalescing (통합)
      : 단편화로 인해 쪼개진 공간들 중 인접한 공간들을 합쳐서 더 크게 만드는 방식

    • 3) Placement strategy (배치전략)
      : 배치를 잘하는 방식을 사용하여 단편화의 발생 가능성을 최대한 줄이는 방식.
      (best-fit, first-fit, worst-fit)

    • 4) paging 기법 사용
      : 고정 길이 방식의 대표 유형

  • Internal fragmentation의 해결방법

    • 1) Segmentation(세그멘테이션)
      : 가변 길이 방식의 대표 유형

    • 2) 메모리 풀
      : 동적 할당의 방식 중 하나. 미리 필요한 만큼 할당받아서 만들어 둔 다는 것이 동적할당과의 차이점.

출처 : https://nevertheless-intheworld.tistory.com/8


5. 멀티 코어를 활용할 수 있는 프로그래밍 기법

  • 멀티 스레드

  • 멀티 프로세스

  • OpenMP


6. STL에서 erase와 remove의 차이점

  • erase : iterator에 해당하는 하나의 요소만을 삭제한다. Capacity가 실제로 감소한다.

  • remove : 해당 범위 중에 해당 값과 일치하는 모든 요소를 삭제한다. Capacity가 감소하지는 않는다.


7. 스택과 큐의 차이점

  • 스택은 Last-in - first-out 후입선출 구조이다. (LIFO)

  • 큐는 First-In - First-Out 선입선출 구조이다. (FIFO)


8. 배열과 리스트의 차이점

  • 1) 배열

  • 배열은 고정된 크기를 갖는 같은 자료형의 원소들이 연속적인 형태로 구성된 자료구조이다.

    • 인덱스에 따라 값을 유지하므로 원소가 삭제되어도 빈자리가 남게되어 메모리가 낭비된다.

    • 처음 크기를 10으로 지정한다면 5개의 데이터만 저장하더라도 실제 배열의 크기는 10이 됨.

  • 데이터 개수가 정해져있고 접근이 빈번할 경우 배열이 효율적


  • 2) 리스트

  • 리스트는 원소들 간의 순서로 순서가 있는 데이터의 모임. 다른 이름으로는 시퀀스(Sequence)라고도 부른다.

  • 빈틈없는 데이터의 적재라는 장점을 가짐.

  • Array List와 Linked List는 구현 방법에 따라 나뉜다.

    • Array List

      • 배열을 이용해 리스트를 구현한 것
      • 접근이 빠름. 하지만 데이터 추가와 삭제가 느림.

      • 동적으로 사용하기 힘듦.

    • Linked List

      • 연결로 구현한 리스트

      • 한 원소에서 값과 다음 원소의 주소를 알고 연결하는 방식

      • 순차적으로 접근함 W(n)

      • 삽입, 삭제는 O(1)이지만 해당 지점까지 접근해야 하므로 W(n)일 수 있음.

      • 배열과 다르게 논리적 저장 순서와 물리적 저장 순서가 일치하지 않는다.

  • 배열은 Compile time에 할당되는 정적 메모리 할당, 리스트는 새로운 Node가 추가되는 runtime에 할당되는 동적 메모리 할당

출처 : https://jy-tblog.tistory.com/38

9. vector와 list의 차이점

  • vector를 중간 삽입 시 원소를 밀어내지만 list는 노드를 연결만 하기 때문에 삽입/삭제 부분에서 시간복잡도의 우위를 가짐

  • vector는 랜덤 부분 접근이 가능하지만 list는 더블 링크드리스트로 되어 있기 때문에 랜덤 접근이 불가능. 검색 측면에서는 vector가 우위를 가짐

  • 1) Vector

    • 연속적인 메모리

    • 미래에 들어갈 요소를 위해 선할당을 한다.

    • 요소를 추가하는 어느 때나, 전체 vector의 메모리를 재할당 할 수 있다.

    • 랜덤하게 vector 요소에 접근 할 수 있다.

    • 장점

      • 개별 원소들 접근 가능 & 접근 속도 빠름

      • 원소를 마지막에 삽입하는 것이 빠름

      • 랜덤으로 원소 순회가 가능

    • 단점

      • 컨테이너 끝이 아닌 곳에 삽입/제거시 성능이 현저히 떨어짐

      • 동적이라 확장/축소가 편하나 확장시 비용이 큼

  • 2) 리스트

    • 비연속적인 메모리

    • 리스트는 double linked list로 구현되어 있음

    • 메모리 선할당을 하지 않음

    • 추가와 제거에 비용이 싸고, 리스트 어디서든 일어날 수 있음

    • 요소에 랜덤 접근 불가능

    • 장점

      • 컨테이너 어느 위치에서라도 삽입/제거가 빠름

      • 원소들의 컨테이너 내 이동이 빠름

    • 단점

      • 원소의 인덱스로 직접 접근이 불가능함

      • 특정 원소에 접근하려면 처음이나 끝부터 선형 탐색을 해야함

      • 컨테이너 내 순회가 forward / reverse만 가능하여 느림

      • 원소 간 상호 연결 정보를 위해 추가적 메모리 비용 발생

출처 : https://chanheess.tistory.com/154


10. 클래스와 구조체의 차이점

  • 구조체는 접근제어 지시자를 선언하지 않으면 public으로, 클래스는 private로 선언된다는 것

11. OOP의 특징

  1. 캡슐화, Encapsulation
    : 한 객체가 특정한 하나의 목적을 위해 필요한 데이터나 메소드를 하나로 묶는 것
  • 데이터는 외부에서 직접 접근을 하면 안되고 함수를 통해서만 접근해야함
  1. 정보 은닉, Information hiding
    : 캡슐화의 목표. 내부 구조는 private하게 감춰두고 외부에서 조작할 수 있는 정보만 public으로 공개함.

  2. 상속, Inheritance
    : 기존 메소드와 변수를 물려받되, 필요한 기능을 더 추가하거나 자식클래스에게 맞게 재정의하는 방법

  3. 추상화, Abstraction
    : 공통의 속성이나 기능을 묶어 이름을 붙이는 것

  4. 다형성, Polymorphism
    : 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있다는 것을 뜻함

  • 일반적으로 오버라이딩 혹은 오버로딩을 의미
  1. 동적 바인딩
    : runtime 값에 따라 변수 데이터 타입, 호출될 함수가 결정됨

출처 : https://computasha.github.io/CS-OOP/


12. SOLID

  1. SRP(Single Responsibility Principle), 단일 책임 원칙
    : 모든 클래스는 단 한 가지의 책임을 부여 받아 수정할 이유가 단 한가지여야 함

  2. OCP(Open-Closed Principle), 개방 폐쇄 원칙
    : 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)가 확장에 대해서는 유연하여야 하지만 수정에 대해서는 폐쇄적이어야 함

  3. LSP(Liskov Substitution Principle), 리스코프 치환 원칙
    : 상위 타입은 항상 하위 타입으로 대체할 수 있어야 함

  4. ISP(Interface Segreagation Principle), 인터페이스 분리 원칙
    : 어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소한의 인터페이스만을 사용해야 함

  5. DIP(Dependency Inversion Principle), 의존성 역전 원칙
    : 상위 모듈이 하위 모듈에 종속성을 가져서는 안되며 양쪽 모두 추상화에 의존해야 함


13. template란?

  • 템플릿(template)은 C++ 프로그래밍 언어의 한 기능으로, 함수와 클래스가 제네릭 형과 동작할 수 있게 도와 준다. 함수나 클래스가 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 한다.

  • 템플릿은 C++에서 프로그래머들에게 유용한데, 특히 다중 상속과 연산자 오버로딩과 결합할 때 그러하다. C++ 표준 라이브러리는 연결된 템플릿의 프레임워크 안에서 수많은 유용한 함수들을 제공한다.

출처 : https://ko.wikipedia.org/wiki/%ED%85%9C%ED%94%8C%EB%A6%BF_(C%2B%2B)


14. 스마트포인터란?

  • 스마트 포인터

    • c++에서 new 키워드를 통해 동적 할당한 메모리는 반드시 delete를 사용하여 해제해야한다. 만약 해제 하지 않으면 메모리 누수(Memory leak)가 발생하게 되는데 스마트 포인터에서는 이러한 실수를 방지하기 위해 사용이 끝난 메모리를 자동으로 해제해주는 것 외에 다양한 기능을 제공한다.

    • 장점

      • 자동 메모리 해제 (예외가 발생해도 메모리를 해제해줌)

      • 포인터 자동 초기화

    • c++ 11 부터는 3가지 스마트 포인터를 제공한다. 이 3가지 스마트 포인터는 참조 횟수(Reference count)에 따라서 구별된다.

    • 참조 횟수 : 해당 메모리를 참조하는 포인터가 몇 개인지 나타내는 값, 참조 횟수가 0이 되면 메모리를 자동으로 해제한다.

      • unique_ptr : 참조 횟수가 1인 스마트 포인터, 한 객체(메모리 주소) 당 하나의 포인터만 허용함

      • shared_ptr : 참조 횟수가 1 이상인 스마트 포인터

      • weak_ptr : 객체를 참조를 해도 참조 횟수가 증가하지 않는 포인터. (스마트 포인터가 서로를 가리키면 영원히 참조 횟수가 0이 되지 않는 순환 참조가 발생하므로 이를 제거하기 위해 사용됨)

  			unique_ptr<T> p(new T);
 			shared_ptr<T> p(new T);
  			weak_ptr<T> p(new T);
  

출처 : https://janghyeonjun.github.io/language/smartpointer-memorypool/


15. 메모리 풀이란?

  • 사용할 큰 메모리를 미리 할당하고 이를 작은 메모리 블록으로 나누어 메모리가 필요할 때마다 이 블록을 건네주고, 다 사용한 블록은 돌려받는 기법

  • 직접 구현하거나 apr_pool, boost::pool과 같은 라이브러리를 통해 사용할 수 있다.

  • 장점

    • 잦은 할당/해제시 발생하는 비용을 줄여준다.

    • 메모리 할당 시 실제로 몇 바이트를 할당했는지 추가적으로 기록하는데, 이러한 메모리 사용을 줄여준다.

    • 메모리 단편화 문제 해결

  • 단점

    • 쓸데없이 메모리 공간을 차지할 수 있기 때문에
      적절하게 크기를 설정하지 않으면 공간 활용도가 떨어지는 문제가 있다.

16. 스택으로 큐 구현하기, 큐로 스택 구현하기

  • 스택으로 큐 구현하기
class makeQueueUsingStack 
{
private:
	stack<int> a;
	stack<int> b;

public:

	void enqueue(int data)
	{
		a.push(data);
	}

	int dequeue()
	{
		if (b.empty())
		{
			while (!a.empty())
			{
				b.push(a.top());
				a.pop();
			}
		}

		int data = b.top();
		b.pop();

		return data;
	}
};
  • 큐로 스택 구현하기
class makeStackUsingQueue
{
private:
	queue<int> a;
	queue<int> b;

public:
	void push(int data)
	{
		if (a.empty())
		{
			a.push(data);
		}
		else
		{
			while (!a.empty())
			{
				b.push(a.front());
				a.pop();
			}

			a.push(data);

			while (!b.empty())
			{
				a.push(b.front());
				b.pop();
			}
		}
	}

	int pop()
	{
		int data = a.front();
		a.pop();

		return data;
	}
};

출처 : https://tdm1223.github.io/algorithm/stackQueue/

컴퓨터 그래픽스

  • 컴퓨터를 이용해 실제 세계의 영상을 조작하거나 새로운 영상을 만들어내는 기술을 가리킨다.

  • 컴퓨터 그래픽스에는 가상 세계에 구축된 모델로부터, 계산에 의해서, 씬을 시뮬레이션 하는 경우, 실세계의 화상 정보를 가공해 화상을 조작하는 경우, 화상과는 직접 관계가 없는 데이터 등을 가시화하는 경우가 있다.

  • 모양과 색을 수치로 변화하여 디지털로 나타내는 논리적 표현 방법이다. 확대, 축소, 회전 등의 변환이 가능하고 색의 변경이 쉽고, 3차원 공간에서 자유자재로 이동하면서 다각도에서도 볼 수 있다. 광원의 위치에서 물체 각 면의 밝기를 나타낼 수 있고, 표면의 재질감과 투명감 등 다양하고 섬세한 묘사가 가능하다. 이렇듯 시간과 공간을 자유롭게 조작할 수 있다는 점이 강점이다.

1. 타겟 위치와의 각도 계산

  • 플레이어 정면 벡터를 A

  • 플레이어에서 타겟 위치까지의 벡터를 B

  • 각도 = acos(dot(A, B))

  • 방향까지 정확히 구하기 위해선 외적을 사용해야함.


2. 쿼터니언은 어떤 경우에 사용하는가? 그리고 사용하는 이유는 무엇인가?

  • 회전각에 대한 보간(=구면 보간)이 필요한 경우 행렬보다 계산이 빠르고 간단하다.

  • 회전 행렬에 의해서 두 축의 회전값이 겹칠 때 발생하는 문제(짐벌락)을 해결할 수 있다.

  • 짐벌이란 단일 축으로 물체가 회전하도록 중심축을 가진 구조물이다.

  • 오일러 각이라는 것은 3차원상의 강체의 방향과 회전을 정의하기위해 만들어낸 시스템이다.

  • x,y,z 이 세축이 회전에서 종속적인 이유는 바로 오일러 각에서 회전 자체를 이 세 축으로 나눠서 계산하기 때문이다.

  • 세 축에 대한 회전때문에 발생하는 짐벌락을 피하기 위해서는 특정한 축에 대한 회전을 시도하거나, 쿼터니언을 통해 회전시키면 된다.

출처: https://handhp1.tistory.com/3


3. 컬링 기법들을 아는 대로 나열하고 설명

  • 컬링이란 카메라에 보이지 않는 부분을 제거하는 작업을 총칭한다.

  • Backface Culling - 폴리곤의 후면 제거

  • Frustum Culling - 시야 절두체 외 제거

  • Occlusion Culling - 가려진 폴리곤 제거

  • BSP, PVS (Potential Visibility Sets) - 구역 별로 보일 수 있는 구역 지정 컬링

  • 기타 공간 처리 기법들

  • Unity에서 Occlusion Culling 기법 사용해봤음
    -> 카메라에 보이지 않는 부분은 렌더링 비활성화하는 기능
    https://docs.unity3d.com/kr/2018.4/Manual/OcclusionCulling.html


4. 그림자를 생성하는 기법들을 아는 대로 나열하고 설명

  • 원형 그림자

  • Projected Shadow - 투영 그림자

  • Shadow Map - 깊이 버퍼맵(쉐도우 맵) 사용

  • Volume Shadow - 쉐도우 볼륨을 생성하고, 스텐실 버퍼를 사용

질문들 & 답 출처 : https://www.slideshare.net/agebreak/0410-10197035?related=2


5. 렌더링 파이프라인이 무엇인지와 그 순서

  • 렌더링 파이프라인 : 3차원 이미지를 2차원 래스터 이미지로 표현을 하기위한 단계적인 방법을 말한다.

  • 그래픽 파이프라인의 발생 -> 변형 -> 버텍스 당 광원 처리(vertex shader) -> 변형 가시화 및 변형 일반화 -> 프리미티브 발생(Geometry shader) -> 오려내기(클리핑) -> 뷰포트 변형 -> 스캔 변환 및 래스터화 -> 텍스처링, 음영 처리 -> 화면 표시

출처 : https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%BD%EC%8A%A4_%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8


6. transformation pipeline


7. Lighting Types

  • Ambient

    • scattered light (no directions)

    • From everywhere

      • All-directions light
  • Diffuse

    • Directional light : from one direction light

    • Once hit on a surface, it scatters in all directions

      • Viewpoint - independent

      • appears equally bright

  • Specular

    • Directional light

    • bounces off in a preferred direction

      • Creates highlights

      • Viewpiont - dependent


8. bump mapping

  • 렌더링될 물체의 픽셀마다 표면 법선을 흔들어 높낮이가 있어 보이게 하는 컴퓨터 그래픽 기술 중 하나이다.

  • 범프 매핑으로 주로 쓰이는 기술에는 법선 매핑, 시차 매핑이 있다.

  • 범프 매핑은 울퉁불퉁한 표면을 텍스처를 통해 좀 더 사실적으로 나타내기 위한 방법이다.

  • 3차원 장면을 렌더링할 때 3차원 모델과 조명에 따라 화면상의 픽셀의 밝기와 색이 결정된다. 물체가 보여야할 지 결정하는 기하학적인 계산을 하고, 표면 법선을 계산하기 위해 삼각법을 사용한다.

  • 표면법선과 빛의 방향만을 가지고, 퐁 셰이딩이나 이와 유사한 계산법으로 밝기를 계산한다. 빛이 표면과 평행하게 들어올 때는 표면은 검게 보이고, 수직으로 들어올 때는 가장 밝게 보인다. 그 이후에 물체를 좀 더 사실감있게 표현하기 위해 물체의 표면에 텍스쳐를 씌운다.

  • 텍스처를 씌운 후에, 각 픽셀마다 다음과 같은 처리를 한다.

      1. 렌더러는 표면의 각 지점에 대응하는 높이맵을 찾는다.
      1. 그리고 삼각법을 통해서 높이맵의 표면법선을 계산한다.
      1. 2단계에서 계산된 범프맵의 법선을 물체 표면 법선에 더한다. (표면법선을 흐트려뜨린다고도 한다.)
      1. 새로운 울퉁불퉁한 표면에 퐁 셰이딩과 같은 방법으로 밝기를 계산한다.

9. phong shading

  • 고러드 쉐이딩에서는 하이라이트나 반사광을 표현할 수 없는데 이것을 가능하게 해주는 쉐이딩 기법

  • 게임에서는 퐁 쉐이딩이 적용될 명암 단계를 미리 이미지화 해놓고 면의 각에 따라 만들어 둔 이미지 중 필요한 부분만을 사용

  • phong에 의해 제안된 방법으로 꼭짓점 벡터 역시 전체 삼각형 내에서 보정되어지는 방법이다.

  • 퐁 쉐이딩된 삼각형 내의 모든 점은 그 표면 표준 벡터의 방향으로 벡터의 방향을 이루게 된다. 그러므로 조명 과정을 통해 삼각형 내의 모든 점들이 보다 정확한 색상을 가질 수 있도록 해준다.

출처 : https://cglink.com/terms/1085


C#

1. C#의 특징

  • 객체 지향 언어

  • 닷넷 프로그램이 동작하는 닷넷 플랫폼을 가장 직접적으로 반영하고, 또한 닷넷 플랫폼에 강하게 의존하는 프로그래밍 언어

  • Garbage Collection

  • 자료형을 정확히 선언해야함.


2. namespace란?

  • namespace는 관련 개체 집합을 포함하는 범위를 선언하는 데 사용된다. 네임스페이스를 사용하여 코드 요소를 구성하고 전역적으로 고유한 형식을 만들 수 있다.

  • namespace끼리 이름은 달라야 한다.

  • 다른 namespace 영역은 class 이름이 같아도 상관없다.

  • using을 사용하면 namespace의 이름을 생략할 수 있다.

  • namespace의 클래스 접근은 static 한정자를 이용해야함

출처 : https://m.blog.naver.com/bug_ping/221425846342


Unity

1. 게임 최적화 방법

  • Unity 게임을 더 빠르게 하기 위한 체크리스트

    • PC 용으로는 타겟 GPU의 스펙에 맞게 정점 수를 20만에서 300만보다 적게합니다.

    • 내장 쉐이더를 사용하는 경우, Mobile 또는 Unlit의 카테고리에서 선택합니다. 모바일이 아닌 플랫폼에서도 작동하지만 더 복잡한 쉐이더가 단순화되고 근사화(approximated)된 버전입니다.

    • 씬에서 다른 메테리얼의 수가 낮도록 억제합니다 - 서로 다른 오브젝트간에 메테리얼을 최대한 공유합니다.

    • 움직이지 않는 오브젝트에 대해 Static을 설정하고 Static Batching과 같은 내부 최적화를 허용합니다.

    • Only have a single (preferably directional) pixel light affecting your geometry, rather than multiples.

    • Bake lighting rather than using dynamic lighting.

    • 가능한한 압축 텍스처 포맷을 사용하고, 그 외의 경우는 32비트보다 16비트를 선택합니다.

    • Avoid using fog where possible.

    • Occlusion Culling의 장점을 배운 뒤, 복잡하고 static한 씬에 의해 표시되는 지오메트리의 양 및 드로우콜을 줄일 수 있습니다. 오클루전 컬링의 효과가 나오는 레벨의 설계를 합니다.

    • Skybox을 사용하여 멀리 있는 지오메트리를 “진짜처럼 보이게 합니다.”
      픽셀 쉐이더를 사용하거나 Texture Combiner를 사용하여 다중 패스가 아닌 복수의 텍스처를 믹스합니다.

    • Use half precision variables where possible.

    • 복잡한 숫자 계산에서는 사용을 최소화하고, 예를 들면 pow, sin, cos 등을 픽셀 쉐이더에서의 사용을 최소화합니다.

    • 프라그먼트(Fragment) 당 텍스처를 보다 적어지도록 합니다.

출처 : https://docs.unity3d.com/kr/530/Manual/OptimizingGraphicsPerformance.html


2. Coroutine이란?

  • Update 함수에 코드를 추가하는 것도 프레임마다 페이드 할 수 있다. 그러나 이러한 작업은 보통 코루틴을 사용하면 편리하다.

  • 코루틴은 실행을 중지하여 Unity에 제어권을 돌려주고, 그러나 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능입니다.

  • 게임 중의 태스크는 정기적으로 수행해야 하며, 간단한 방법은 Update 함수에서 할 수 있다. 그러나 이 함수는 초당 몇 번이나 호출된다. 작업이 너무 자주 반복할 필요가 없는 경우, 코루틴에 넣어 매 프레임 실행하지 않고 정기적으로 업데이트 할 수 있다.

  • 단점

    • 스크립트가 disable 될 때 코루틴도 같이 종료시켜주어야 하는 번거로움

    • 가비지(Garbage)를 자주 생성함

      • StartCoroutine을 할 때 가비지를 많이 생성함

      • yield 문을 사용할 때, new WaitForSeconds와 같이 새로 인스턴스를 생성하는 부분이 문제가 된다. -> yield 문이 동일한 초나, 동일한 조건으로 계속 반복되는 상황이라면 캐싱하여 사용


3. particle 시스템이란?

  • 파티클(Particles) 은 파티클 시스템에 의해 큰 숫자로 표시되고 이동되는 작고 단순한 이미지 또는 메시다. 각 파티클은 유체 또는 비정질 엔티티의 작은 부분을 나타내며, 모든 파티클의 효과가 전체 엔티티의 느낌을 만든다.

  • 액체, 연기, 구름, 화염 및 마법 주문과 같은 효과의 경우 Particle Systems 그래픽스 방식을 사용하여 고유한 유동성과 에너지를 표현할 수 있다.

출처 : https://docs.unity3d.com/kr/2017.4/Manual/ParticleSystems.html


네트워크

1. TCP/UDP가 무엇인지와 차이점

  • TCP와 UDP는 전송 계층에서 사용하는, 데이터를 보내기 위해 사용하는 프로토콜

  • TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름 제어 및 혼잡 제어 기능을 제공한다.

    • 전자 메일이나 www 서비스에서 사용됨
  • UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷에 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속성이 중요한 서비스에 사용된다.

    • 실시간 스트리밍에서 사용됨

0개의 댓글