공부/Unity

24.06.04

월러비 2024. 6. 10. 17:29

 

  • InputSYstem 에셋에서 Move Action에 키 할당
  • Test_InputSystem 씬과 스크립트 생성 - 테스트용

InputSystem

  • Action Maps에서 어떤 주체에
  • Action Type - Value : 계속 눌러서 입력이 들어가게 하는 속성 (이동)
  • Action Type - Button : 한번만 눌러서 입력하는것이다. (공격)
  • Action Type - Path Through : 입력을 통과시킨다. (뭔지 감이 안온다)
  • 이동 할당 - 이 방식은 느려서 잘 사용하지 않는다.
    • InputControl (파일) - Edit Asset 클릭 - Actions - Move - 2D Vector - 각 위치에 Binding - Path 클릭 - Keyboard 에서 By Location of Key 클릭 - 할당하는 키 클릭 (Path 옆에 T 버튼을 누르면 코드가 나오니 이걸로 쉽게 바꿀 수도 있다.)

 

  • ob.Add() 가 있을때 ‘.’은 ‘직접 접근 연산자’다. ⇒ ob 안에있는 Add에 접근한다.
    • ob가 다른 클래스를 상속하고 그 안에 또 다른 Add가 있다고 해도 ob의 Add가 호출된다.
  • A oba = ob; oba.Add();
    • 부모에 있는 함수로 호출된다. (가상화 사용 안함)
  • 가상화를 쓰는 이유 : ‘같은 이름’으로 ‘다른 역할’을 수행하기 위해서이다.
    • 캐릭터 Move()
      • 플레이어
      • 몬스터
      • 보스
    • 캐릭터[3] {플, 몬, 보}
    • 캐릭터[0].Move(); ⇒ 자식에 있는 Move를 콜 한다.
  • 배열은 ‘포인터’이고, 배열의 이름은 ‘배열의 시작 주소다’
    • 배열을 ‘가상 테이블’이라고 한다.

InputSystem

  • SendMessage : 애니메이션 이벤트, Invoke가 샌드 메세지 기반이다.

Test_Message

  • 한 스크립트에서 ‘함수명’을 지정해서 ‘값’을 보내고 다른 스크립트에서 그것을 받아 지정된 함수를 실행한다.
  • SendMessage 안쓰는 이유
    • 이 함수는 메세지 맵을 생성한다.
    • 메세지 맵은 ‘함수 맵(string)’과 ‘함수의 주소’를 갖는다.
    • 함수 맵은 ‘균형 이진 트리’로 동작한다.
    • 균형 이진트리의 시간복잡도는 log n이다.
      • O(1) > O(log n) > O(n) > O(n log n) > O(n제곱)
    • 최악의 경우 너무 오래 걸리기에 사용하지 않는다.
    • BroadCast Message도 자식까지 찾아야하기에 사용하지 않는다.
    • Invoke UnityEvent도 느리다.
    • Invoke C Sharp Events를 사용한다.
      • player Input(컴포넌트)는 있어야하지만, Input Controller는 없어도 괜찮다.
      • C# 스크립트에서 정의를 할 수 있기 때문이다.

함수 콜

  1. Class A에 void Add() 함수가 있다고 가정하자
  2. 다른 클래스에서 A ob = new A();를 정의한다.
    1. 이때, ‘스택’ 영역에는 ob 공간이 생성된다.
      1. 이 공간은 32비트에서는 ‘4바이트’, 64비트에서는 ‘8바이트’이다.
    2. 힙 공간에는 A의 공간이 생성되고 A의 안에는 Add 공간이 생성된다.
  3. ob는 A의 주소를 가지고 있고 A는 Add의 주소를 가지고 있다.
    1. Add의 주소는 Code 영역의 Add 코드의 주소를 가리킨다.
  4. ob.Add를 하면 주소들을 찾아서 이동

 

  • 가상함수 테이블 설명
  • Player Input(컴포넌트) - Behavior(어떻게 액션을 실행할건지 정하는 속성) - UnityEvent 간단 실행
  • Player Input(컴포넌트) - Behavior(어떻게 액션을 실행할건지 정하는 속성) - C# Event 간단 실행

4교시, 5교시

  • InputControl 안만들고 스크립트내에서 액션 맵 만들기
    • 선생님은 InputControl에 세팅만 해놓고 기능은 스크립트로 작성한다.
    • 너무 하드코딩이기 떄문이다.
    • 오류나니까 선생님 코드 보고 오류 수정하자

조명 - 그래픽 이론

  • 평면정보를 출력하는 애 : Material
    • 메테리얼 정보를 출력하는데 ‘PBR’을 사용한다.
    • PBR
      • Metalic
      • Smoothless (Roughness 거칠기정도)
  • 색을 보여주는 4가지 방법
    • Ambient : 사방에서 고르게 들어오는 빛
      • 주가 되는 광원 색 (밖에 나가면 태양이 나의 색이고, 실내에 있으면 형광등이 나의 색이다.)
      • 낮이면 태양이 노란 빛을 화면에 비추니 오브젝트가 노란 빛을 내고, 석양이 지면 화면에 주황 빛을 준다.
    • Diffuse : 내가 가진 색 - 음영 관련 색상
      • 이게 순수한 상태 : Albedo (옷이 검정색이라면, 옷의 Albedo는 검정이다.)
      • Diffuse.Texture(텍스처(이미지) 색) * Diffuse.Color(보정색) * 음영(그림자는 아니고 빛에 의해 가려지는 부분)
      • Nomal Vector(한 면에 수직인 방향) 과 조명의 벡터(노멀벡터에서 빛을 보는 방향의 벡터)의 ‘내적’이 ‘음영’이다.
        • 내적은 1 ~ 0으로 각도가 커질수록 내적 값은 작아진다.
        • 1이 가장 밝고 0에 가까울수록 빛을 못받은 음영이 진 부분이다.
      • 결론 (L.N = Light NomalVector - 조명 수직벡터 / 즉, 음영이다.)
        • D.T * D.C * (-L.N)
    • Specular
    • Emissive : 외곽선 - 외곽에 빛나는 선
      • 배경과 물체의 색이 같을때 구분이 갈 수 있도록 외곽에 구분을 해준다.
      • 주체가 물체를 바라보는 시점을 기준으로 보는 물체의 외곽선이다.
      • 외과선도 1이 가장 밝고, 0에 가까울수록 어두워진다.
      • 1 - (N.E)(Nomal Vector Emissive) ⇒ 외곽선은 각이 클수록 밝아야하기 때문이다.
        • SmoothStep : 일정 구간에서 색이 반전되는 기능의 함수다.
      • E.C(Emissive Color) * (N.E)

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

24.06.07  (2) 2024.06.10
24.06.05  (1) 2024.06.10
24.06.03  (0) 2024.06.10
24.05.31  (1) 2024.06.10
24.05.30  (0) 2024.06.10