IT/공부 정리

[UNITY] C# 중급 프로그래밍

rinix_x 2023. 2. 18. 07:04

○ 벡터 연산 기초

- Vector3 (x,y,z), 벡터란 정해진 원소를 갖고 있는 것.

- 길이(거리)와 방향을 가르키는 존재

 쿼터니언

- Quaternion.Enler [ 오일러;수학자]

- 오일러는 x,y,z축으로 회전하는 각을 만들었다?

- 회전 전과 회전 후의 축이 겹쳤을 경우 소실됨 3축에서 2축이 되버림

 => 짐벌 락?현상.(그래서 예전엔 90도회전을 피해감,89.999)

- Quaternion은 x,y,z,w 4축을 사용해서 90도 회전도 무사히 표현가능

 + Euler를 통해 나타내고 싶은 각을 표현, Euler(new Vector3(0,0,0))

 + LookRotation(new Vector3 (0,1,0)); 특정 방향으로 회전.

 + Lerp(Euler,Euler, %); 두 벡터 사이의 %의 값이 들어옴

 

○ 인스턴스화  => 프리펩 (재사용가능)

Instantiate(target); //새 객체 생성

 

○ 오버로드

함수 이름을 똑같이 하되, 다른 버전을 만드는 것,

오버로드는 함수 이름이 똑같아야함 하지만,

내용은 달라야 함, 출력이 다를 수도 있음

ex ) int sum(int a, int b)

int sum(int a,int b, int c)

float sum(float a, float b)

 

○ 정적 변수, 정적 함수

static => 어딘가에 선언된.. 

- 정적 변수 : 오브젝트를 초월해서 단 하나만 존재하는 변수, 개별이 아닌 모든 오브젝트(스크립트)의 단 하나의 변수

- 정적 함수 : 개별 오브젝트 상관없이 모든 것이 사용할 수 있는 변수 ->오브젝트를 거치지 않고 사용 가능

 = 클래스에서 바로  . 찍어서 가능

ex ) class cat{

public static nya(){}

}

다른 스크립트에서 cat.nya() 호출 가능.

 

○ 싱글톤

- 디자인패턴이란, 프로그래머 사이에서 공유되는 어떤한 코드를 작성하는 방향,

- 게임이나 메모리 상에 하나만 존재, 언제어디서든 접근가능한 오브젝트에 사용

  + static사용하여 동시에 접근가능한 특정 변수 사용가능

 

○ 코루틴

처리와 처리 사이에 대기 시간을 줄 수 있으며, 병렬로 실행 가능

EX) FadeInOut 

 

○ 레이캐스트

Physics.Raycast(광선이 시작되는 지점, 광선 방향, 사전거리, out 정보 넣는 곳(RaycastHit) , 해당 레이어에서만 동작) : (콜라이더 감지)

 

○ 상속 및 다형성

 - 상속 : 미리 베이스가 되는 베이스 클래스를 갖고 와서 코드 재활용 및 구조 간결 가능

 - 파생된 클래스를 한번에 관리 가능

 베이스 클래스 == 부모

모든 친구들의 원형, 모든 친구들이 공통으로 가진 특성, 기초적인 개념을 가지고 있음

public - 공개

protected - 보호된

private - 비공개 

해서 public 함수에서 private를 호출가능하지만, 자식 클래스에서 private 호출은 불가능, protected는 바깥에서는 숨기기 가능

 

- 다형성

polymorphism에서 poly는 여러, 다양한(many), morph는 변형(change)이나 형태(form)의 의미

사전적 정의로만 살펴보면 "여러가지 형태"를 나타내는데, 이를 객체 지향 프로그래밍으로 끌고 온다면 "하나의 객체가 여러 개의 형태를 가질 수 있는 능력" ,

부모 클래스를 기반으로 여러 자식 클래스를 만들 수 있음

-> 오버 로딩과 오버라이딩에서 접해 볼 수 있음

 

- 오버라이드

부모 클래스에서 만든 함수를 자식 클래스에서 덮어 씌어서 자신만의 것으로 새롭게 만드는 것을 의미 [자식클래스]- virtual 자식이 덮어 씌울 수 있다는 의미, (대체 가능) [부모클래스]

 

○ 인터페이스

상속 받는 클래스에게 함수나 어떤 것을 강제하는 것..아이템, 몬스터, 플레이어 직업,, 등에 상관없이 한번에 처리할 때 많이 사용

- 인터페이스는 'I' 대문자를 붙여줌, ex) IItme

코드 다 지우고

public interface IItem {

    void Use();

}

인터페이스 에서는 함수 내부를 구현하지 않음.

GoldItem : MonoBehaviour, IItem{    public void Use(){} // 인터페이스 내에서 선언한 함수는 무조건, 만들어야함}

// 동작이 달라도 괜춘

collider 호출 시 getComponent.<IItem>()  사용시

내부에 무조건 Use라는 함수가 있다는 걸 알아서

따로 체크, 확인 할 필요 없이 Use사용 가능

 

○ 추상클래스 abstract

- 일반적인 클래스와 인터페이스의 중간 역할

- 자식에게 자신이 갖고 있는 멤버나 클래스를 상속, 하지만, 실시간생성이 안됨

  + 인터페이스는 내부에 구현 불가능하지만, 추상클래스는 내부 구현 가능 but, 찍어낼 수 없음

  + 물론 내부에 구현 하지 않아도 가능.

  + 필요한 부분 만 public abstract void Func(){} 시

  + 자식 클래스에서 오버라이드 해서 사용 가능하도록 함

 

○ 프로퍼티

- 변수처럼 사용하지만, 안에서는 특수한 기능을 넣을 수 있음

public int point {

     get {

            return _point

    }

    set{

           if(_point<0)

                   _point = 0

           else

                   _point = value

   }

}

이런식으로 변수 저장 시 조건 주는 것이 가능

 

 

 

 

 

 

 

 

반응형

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

[UNITY/C#] C#고급 프로그래밍  (0) 2023.03.09
[UNITY] C# list 사용법  (2) 2023.02.24
[Unity] 유니티 내부 기초  (0) 2023.02.18
[UNITY] C# 기본 프로그래밍  (0) 2023.02.11
[UNITY] 게임 엔진의 원리  (0) 2023.02.11