sort 함수는 배열을 오름차순으로 정렬하는 함수이다.

사용 예는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
 
using namespace std;
 
void main(){
    int arr[5= {21453};
    sort(arr,arr+5);
}
 
cs

위 코드를 실행할 경우, 배열이 오름차순으로 정렬된다.

{2, 1, 4, 5, 3} -> {1, 2, 3, 4, 5}

함수 사용시, sort(시작 주소, 마지막 주소)의 형태로 입력하면 된다.

이를 이용해 한가지 간단한 프로그램을 만들어보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <algorithm>
#include <string>
#include <time.h>
 
using namespace std;
#define MAX 30000
#define MIN 60000
//유저를 점수에 맞추어 나열하자.
 
class player {
private:
    int score;
    string userName;
public:
    player(int inputScore, string inputName) {
        this->score = inputScore;
        this->userName = inputName;
    }
 
    bool operator< (player &player) {
        return this->score < player.score;
    }
    string printUserName() {
        return this->userName;
    }
    void print() {
        cout << this->userName << "의 점수는 " << this->score << "입니다." << endl;
    }
};
 
void main() {
 
    srand((unsigned int)time(NULL));
    player user[] = {
        player(MIN + rand() % MAX, "젤리곰"), 
        player(MIN + rand() % MAX, "연어훈제하는불곰"),
        player(MIN + rand() % MAX, "렌"), 
        player(MIN + rand() % MAX,"마메"), 
        player(MIN + rand() % MAX, "하길")
    };
 
    for(int i=0;i<5;i++){
            user[i].print();
    }
 
    sort(user, user + 5);
 
    cout << "========== 순위표 ==========" << endl;
 
    for (int i = 0; i <5; i++) {
        cout << i + 1 << "위는 " << user[i].printUserName() << endl;
    }
    cout << "이번 달 클랜장은 " << user[0].printUserName() << "입니다." << endl;
    system("pause");
}
cs
 

점수와 유저네임을 메소드로 가지고있는 클래스를 생성하고, 각 유저들의 점수에 따라 순위를 출력하도록 했다.

bool operator< (player &player) {

        return this->score < player.score;

    }

연산자 오버라이딩을 사용해 "<" 연산자를 다음과 같이 처리하겠다는 의미를 가지게 했다.

 

 

 

저번 포스팅에서 언급했듯이, 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를 이용해 카드에 ray가 충돌했을 때 플레이어가 카드를 클릭한 상태임을 갱신하는 코드의 일부이다.

int.Parse()는 문자열을 정수로 변환해준다. 

다운받은 에셋들끼리 축 맞추는중...

 

'Unity > 작업&삽질노트' 카테고리의 다른 글

2021-08-12 작업일지  (0) 2021.08.12
2021-08-09 작업일지  (0) 2021.08.09
2021-08-04 작업일지  (0) 2021.08.04
2021-08-03 작업일지  (0) 2021.08.03
2021-08-02 작업일지  (0) 2021.08.02

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

그중 하나로 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

+ Recent posts