공부/Unity

24.03.06

월러비 2024. 3. 6. 22:41

0. 생성한 스크립트

  • Status : 비트 논리연산
  • Color : 색상 비트 조합 출력
  • String : 문자 변수 및 문자열 변수 출력
  • Casting : 자료형 변환 출력
  • If : if 조건 비교 후 출력
    • 메테리얼 생성 후 삽입
  • Movement : 키 입력 받아서 콘솔에 출력하기

 

1. 비트 연산자

  • <<연산은 그대로 부호 비트의 유지 없이 이동만 한다.
  • >>연산은 이동하는 변수가 음수를 포함한 자료형일 경우, 최상위의 부호 비트는 이동하되, 유지한다.
항목 연산자 설명
AND & 두개의 비트가 1인 경우 1, 그 외는 0
OR | 둘중 하나의 비트라도 1인경우 1
XOR ^ 두개의 비트값이 같으면 0, 다르면 1
NOT연산 ~ 비트값을 반전, 0이면 1 / 1이면 0
쉬프트 왼쪽 << 비트값만큼 왼쪽으로 이동
쉬프트 오른쪽 >> 비트값만큼 오른쪽으로 이동

 

uint attack = 1;
uint armor = 2;
uint hp = 4;
uint mp = 8;
uint status = attack | hp;
=> status의 값은 or연산으로 0101 = 5다.
. status 와 hp를 And 연산으로하면 0100 = 4가 나오니 status는 hp에 포함 된다고 할 수 있다.

비트연산 그

2. 16진수 색상조합 / 분리

  • 0xFFFFFFFF = 1111 1111 1111 1111 1111 1111 1111 1111 => FF = 1바이트 = 8비트
  • 0x00800000 >> 16 => 0x0080인듯 하다 => 128(0*16의 0승 + 8*16에 1승)
uint color = 0x00120013;

uint red = 0x00FF0000;
print($"red = {color & red}");

uint green = 0x0000FF00;
print($"green = {color & green}");

uint blue = 0x000000FF;
print($"blue = {color & blue}");

uint color2 = 0x008040F0;
red = color2 & red; //0x00800000
red = red >> 16;
print($"red = {red}");

green = color2 & green; //0x00004000
green = green >> 8;
print($"green = {green}");

blue = color2 & blue; //0x000000F0
print($"blue = {blue}");

uint color3 = 0x00000000; //검정색?

byte a = 128;
byte r = 255;
byte g = 64;
byte b = 32;

uint alpha = (uint)a << 24;
red = (uint)r << 16;
green = (uint)g << 8;
blue = (uint)b;

color3 = color3 | alpha;
color3 = color3 | red;
color3 = color3 | green;
color3 = color3 | blue;

print($"color3 = {color3}");

색상 비트 조합 그림

3. 문자열

  • string.Compare(A, B) : 두 문자열이 동일하면 0 / 첫 번째 문자열이 두 번째 문자열보다 크면 1 또는 0보다 큰값을 반환 / 첫 번째 문자열이 두 번째 문자열보다 작으면 -1 또는 0보다 작은 값을 반환
char a = '가';
int b = (int)a;

print($"a = {a}");

string name = "aaa bbb ccc";
string koreanName = "ㅁㅁㅁ";

print(name + " / " + koreanName);
print($"{name} / {koreanName}"); ;
Debug.LogFormat("{0} / {1}", name, koreanName);

string name1 = "aaa ";
int result = string.Compare(name, name1); //문자열 비교 함수
print($"Name : {name}, koreanName : {koreanName}, result : {result}");

string name2 = name.Substring(0, 4); //name에서 0번째 자리부터 4자를 자른다.
int result2 = string.Compare(name1, name2);
print($"Name : {name}, koreanName : {koreanName}, result2 : {result2}");

 

4. 캐스팅(자료형 변환)

  • 명시적 캐스팅 : int type2 = (int)type1; => 바뀌는 자료형을 보여주는 변환방법
  • 암시적 캐스팅 : long type4 = type3; => 잘리는값이 없기에 들어가지만, 쓰면 안좋다.
long type1 = 200;
int type2 = (int)type1; //명시적 캐스팅

int type3 = 100;
//long type4 = type3; //암시적 캐스팅(쓰면 안좋다) / int는 long보다 작아서 가능하다.
long type4 = (long)type3;

float pi = 3.14f; //f : 접미어 = float임을 명시해주는것이다?
print($"pi = {pi}");

int pi2 = (int)pi; //소수점이 잘릴것이니 캐스팅 안하면 빨간줄뜬다.
print($"pi2 = {pi2}");

double pi3 = (double)pi;
print($"pi3 = {pi3}");

string s = "1234";
int s1 = System.Convert.ToInt32(s); //이런 변환도 가능하다
print($"s1 = {s1}");

int s2 = 4567;
string s3 = s2.ToString();
print($"s3 = {s3}");

int number = 3;
int number2 = ++number;

print($"number : {number}, number2 : {number2}");

int number3 = number++;

print($"number : {number}, number2 : {number3}");

 

5. 연산자

  • 이항연산자 : +, -, *, /, %, &, |, ^ => a = a+b / a += b
  • 단항연산자 : ~, ++, -- => int a = 3; int b = ++a; int c = a++;
int number = 3;
int number2 = ++number;

print($"number : {number}, number2 : {number2}");

int number3 = number++;

print($"number : {number}, number2 : {number3}");

 

연산자 결과

 

6. if (제어문)

  • if문 아래의 코드가 한줄이라면, 중괄호 생략이 가능하다(2줄 이상이면 안됨)
public int number = 0;

    private void Start()
    {
        if(number == 10)
        {
            print("number == 10");
        }

        if(number >= 10)
        {
            print("number >= 10");
        }
        else if(number >= 8)
        {
            print("number >= 8");
        }
        else
        {
            print("거짓");
        }

        if(number >0 && number <= 6)
        {
            print("number는 0보다 크고 6보다 작음");
        }

        if (!(number > 0 && number <= 6))
        {
            print("number는 0보다 크고 6보다 작음");
        }

        if ((number > 0 && number <= 6) == false)//!는 졸리면 잘 안보여서 이걸 많이 쓴다.
        {
            print("number는 0보다 크고 6보다 작음");
        }

        bool b = number >= 6; //조건맞으면 true 아니면 false
        print($"b = {b}");

        int value = number > 0 ? 10 : 20; //삼항연산자
        print($"value = {value}");
    }

 

7. Input Key 이벤트

if (Input.GetKeyDown(KeyCode.Space)) //누르는순간 true 한번만, 안누르면 false
        {
            print("스페이스 키 누름");
        }

        if (Input.GetKey(KeyCode.Space)) //누르고 있으면 true 계속
        {
            print("스페이스 키 누르고있음");
        }

        if (Input.GetKeyUp(KeyCode.Space)) //누르는순간 true 안누르면 false
        {
            print("스페이스 키 땜");
        }

키 이벤트 결과

 

8. 기타

  1. mesh renderer가 있으면 meterial이라는 재질을 만들수있다.
    1. 에셋폴더 우클릭 -> create -> meterial
  2. 오브젝트 우클릭 -> align with view : 지금 보고있는 화면과 메인 카메라 시점을 맞춘다.
  3. 유니티 에셋폴더 밑에 슬라이더를 맨 왼쪽으로 바꾸면 항목이 리스트 형식으로 바뀐다.
  4. 이름 명명 규칙 : 헝가리안 = ui_hp_Up (자료형_뭘뜻하는지쓰고_어떤역할인지쓰고) => 틀딱도 안쓴다., 파스칼 = HpUp(단어마다 앞글자는 "대문자") => 클래스이름/함수명에 주로 쓴다., 카멜 = hpUp(대소문자 혼용) => 변수에 사용한다.
    => 사람마다 쓰는 방식이 다르니 이게 반드시 맞는것은 아니다.
  5. 플레이 누른 상태에서 스크립트나 값을 추가하면 플레이가 정지했을 때 값이 초기화된다. (실제로 플레이 상태에서 오브젝트 만들고 스크립트도 넣고 매테리얼도 넣어서 값도 바꿨는데 플레이 끄니 전부 날아감...)
  6. f9(디버그 브레이킹 포인트 : 디버깅 중 이 지점에서 멈춘다.) 후 f5 : 디버깅을 하고 브레이킹 포인트까지의 변수와 값이 나온다.
    . 창 => 조사식 => 조사식1 : 이름에 변수명을 치고 나온 값에 우클릭 => 16진수변환 하면 값이 16진수로 나온다.
    . 볼게 끝나면 shift + f5 누르고 브레이킹 포인트에 다시 f9를 눌러줘야 디버깅이 안멈추고 실행된다.
  7. ctrl + z : 이전으로 돌아가기, ctrl + y : 돌아가기 취소

'공부 > Unity' 카테고리의 다른 글

24.03.11  (0) 2024.03.11
24.03.08  (1) 2024.03.08
24.03.07  (0) 2024.03.07
24.03.05  (0) 2024.03.05
24.03.04  (0) 2024.03.04