[2021-9-13 학교 수업중 필기 내용]

C#의 Vector3는 사실 클래스가 아닌 구조체 형식이다.

Vector3 pos = new Vector3(1.0f,2.0f,3.0f);에서 new는 사실 동적할당의 용도로 사용된것이 아니다.

C#에서 구조체는 reference type이 아닌 value type이다.

따라서 구조체는 heap공간이 아닌 stack 공간에 저장될 확률이 높다.

왜 C#에서 구조체는 value type인걸까?

value type의 경의 변수가 선언되었을 때, stack 공간에 저장된다.

메모리 관리 측면에서 heap공간은 stack공간에 비해 비용이 굉장히 높다(시간복잡도가 높다).

즉, stack 공간을 활용할수록, 성능 향상이 될 수 있다.

따라서 자주 쓰는 변수의 경우 클래스 대신 구조체로 구현시 성능 향상효과를 얻을 수 있다.

 

'Unity > C#' 카테고리의 다른 글

[Unity/C#] Update와 FixedUpdate  (0) 2019.06.17
[Unity/C#] Ray&Raycast  (0) 2019.06.11
-C#- Awake/Start/Update  (0) 2019.06.03
-C#- 대리자(delegate)  (0) 2019.05.28
C# - Vector3  (0) 2019.04.03

저번 포스팅에서 언급했듯이, Update는 한번만 호출되는 Start와 달리 매 프레임마다 호출된다.

그렇다면 FixedUpdate는 Update와 어떤 차이점이 있을까?

Update가 매 프레임마다 호출된다면,

FixedUpdate는 일정 시간마다 호출된다.

이와 같은 특성때문에, FixedUpdate는 프레임 속도와 무관하게 업데이트되어야하는  physics와 관련된 메소드 등을 호출하는데 사용한다.

 

 

유니티 라이프 사이클 플로우차트 링크

https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html

'Unity > C#' 카테고리의 다른 글

C#에서 구조체, value type  (0) 2021.09.13
[Unity/C#] Ray&Raycast  (0) 2019.06.11
-C#- Awake/Start/Update  (0) 2019.06.03
-C#- 대리자(delegate)  (0) 2019.05.28
C# - Vector3  (0) 2019.04.03

유니티 작업중 마우스로 오브젝트와 상호작용할 수 있는 방법을 찾아보았다.

그중 하나로 Ray와 Raycast를 이용한 방법이 눈에 띄었다.

 

간단히 설명하면, 특정 위치에서 발사되는 광선를 쏘고, 그 광선과 충돌했을 때 메소드를 호출하는 방식이다.

이 방식을 사용하려면 어디로부터(origin), 어느 방향(direction)으로 Ray가 발사되는지 알아야할것이다.

내 경우에는 내가 보는 화면의 물체와 상호작용하길 원하기 때문에, 내가 클릭한 시점의 마우스 포인터 좌표로부터 내가 바라보는 카메라 방향으로 Ray를 발사해야한다.

 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 Raycast hit;
    if (physics.Raycast(ray,out hit)) {...}

첫번째 라인에서 ray 변수에 main 카메라의 방향으로 마우스가 Input된 포지션으로부터 발사된다는 정보를 담았다.

그 다음, Raycast클래스의 hit변수를 생성한다.

physics.Raycast(ray, out hit)는 ray가 물체에 충돌하면 hit에 그 정보를 할당하고 true를 리턴한다.

이를 이용해 if문으로 ray가 특정 물체에 충돌했을 때 if문 안의 내용을 실행할 수 있게 된다.

 

 

'Unity > C#' 카테고리의 다른 글

C#에서 구조체, value type  (0) 2021.09.13
[Unity/C#] Update와 FixedUpdate  (0) 2019.06.17
-C#- Awake/Start/Update  (0) 2019.06.03
-C#- 대리자(delegate)  (0) 2019.05.28
C# - Vector3  (0) 2019.04.03

유니티 및 C#을 처음 접할 때 스크립트를 생성했을때 가장 먼저 볼 수 있는 함수가 Start와 Update함수일것이다.

Update 함수는 매 프레임마다 실행되는 함수이다.

그렇다면 Start와 Awake함수는 어떤 역할을 하는 함수일까?

두 함수는 언뜻 비슷한 역할을 하는것 같지만 자세히 살펴보면 다른점이 많다.

유니티 도큐먼트를 살펴보면, Start와 Awake는 아래와 같이 서술되어있다.

  • Awake: 이 함수는 항상 Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출됩니다. 게임 오브젝트가 시작하는 동안 비활성 상태인 경우 Awake 함수는 활성화될 때까지 호출되지 않습니다.
  • Start: 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출됩니다.

두 함수 모두 Update함수 호출 이전에 호출되고, 스크립트 라이프사이클중 한번씩만 호출된다는 공통점이 있다.

그리고 두 함수의 가장 큰 차이점은 다음과 같다.

1. Awake함수는 항상 Start함수보다 먼저 호출된다.

2. Start함수는 스크립트가 활성화 되어있는 경우에만 호출된다.

 

'Unity > C#' 카테고리의 다른 글

C#에서 구조체, value type  (0) 2021.09.13
[Unity/C#] Update와 FixedUpdate  (0) 2019.06.17
[Unity/C#] Ray&Raycast  (0) 2019.06.11
-C#- 대리자(delegate)  (0) 2019.05.28
C# - Vector3  (0) 2019.04.03

C#의 대리자(delegate)는 C++의 함수 포인터의 기능과 유사하다.

오늘은 이 대리자에 대해 아주아주 간단하게 적어볼것이다 (한번에 이해가 딱 와닿질 않아서... 추후에 다시 정리해보자.)

delegate는 대리자라는 이름 그대로 메소드를 대신해서 호출하는 역할을 가진다.

 

델리게이트로 메소드를 호출하기 위해서는 반환타입과 매개변수가 모두 해당 메소드와 같은 타입이어야 한다.

delegate void Func(int);

void func(int);

 

delegate int Func2(float);

int func2(float);

 

대리자로 메소드르 호출하려면, 해당 대리자 타입으로 변수를 생성해 호출할 메소드를 참조시키면 된다.

Func delegate;

delegate = new Func(func);

 

'Unity > C#' 카테고리의 다른 글

C#에서 구조체, value type  (0) 2021.09.13
[Unity/C#] Update와 FixedUpdate  (0) 2019.06.17
[Unity/C#] Ray&Raycast  (0) 2019.06.11
-C#- Awake/Start/Update  (0) 2019.06.03
C# - Vector3  (0) 2019.04.03

C#에서는 세 개의 float값을 이용하여 벡터(Vector3)를 나타낼 수 있다. (두 개의 float값을 이용한 Vector2도 있다.)

Vector3는 float(단정밀도 부동소수점)형의 x, y, z값을 가진 구조체이다.

이는 다음과 같이 선언 할 수 있다.

Vector3 position = new Vector3(X,Y,Z); //세 개의 요소가 각각 X, Y, Z값을 가짐.

Vector3 position = new Vector3(X); //세 개의 요소 모두 X값을 가짐.

Vector3 position = new Vector3(Vector2, Z); //지정된 Vector2개체와 Z값에서 새로운 개체 Vector3를 생성.

 

사용 가능한 메서드는 다음 링크에서 확인 가능하다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.numerics.vector3?view=netframework-4.7.2

 

 

'Unity > C#' 카테고리의 다른 글

C#에서 구조체, value type  (0) 2021.09.13
[Unity/C#] Update와 FixedUpdate  (0) 2019.06.17
[Unity/C#] Ray&Raycast  (0) 2019.06.11
-C#- Awake/Start/Update  (0) 2019.06.03
-C#- 대리자(delegate)  (0) 2019.05.28

+ Recent posts