루비의 모험

5 분 소요

💡 공부한 내용 적기

루비의 모험 : 2D 초급자용

https://learn.unity.com/project/rubiyi-moheom-2d-cogeubjayong

1. 튜토리얼

  1. 게임 오브젝트에 새 좌표값 저장 transform.position = position;

  2. 프레임 관련 설정

    QualitySettings.vSyncCount = 0;
    Application.targetFrameRate = 10;
    

    targetrate 고정하려면 vSync(vertical sync - 수직동기화)를 꺼줘야함

    • 수직동기화 : 모니터 주파수에 맞춰 퍼포먼스를 조절하여 tearing 현상을 방지

    하지만 모바일 플랫폼은 vSync를 무시한다고 함, 그냥 targetFrameRate만 신경씀 온디맨드 랜더링으로 모바일 성능 개선할 수 있다함

  3. 타일맵 설명이 있으나 나는 3D이므로 건너뜀

  4. Project Setting > Graphics > Cameara Settings > Transprarency Sort Mode 여기서 y=1로 바꾸면 y축을 기반으로 스프라이트를 그린다. 이때 스프라이트 렌더러Sprite Sort Point를 center -> pivot으로 변경 필요 또 SpritePivot위치도 bottom으로 변경해줘야 한다.


2. 물리 시스템

rigidbody : 물리시스템을 적용 받기 위해 필요한것 2d의 경우 gravity를 비활성화 해야한다

colliders : rigidbody로 물리 시스템을 적용했다면 어떤 부분이 solid한 부분인지 알려줘야한다. 그것이 바로 collider이다. 게임 오브첵트의 외형을 가늠하여 충돌 연산을 할 수 있게 해주는것 적절한 크기 설정 필요

Colliders with trigger : 특정 부분 충돌을 체크해서 체력등을 변경할때 물리적으로 충돌하면 안되는 경우가 있다. 이때 collider의 셋팅에 trigger 체크박스를 활성화 한다.

freeze rotation : 특정 축을 회전하는것을 막는것

충돌 떨림 현상 : rigidbody가 아닌 transform 포지션을 움직이면 복사본을 이동하고 물리시스템 계산되고 해서 발생한다고 하는데 이건 해보면서 읽혀야할듯, 필자는 rigidbody 를 움직이는 식으로 변경해야한다고 한다.


3. 함수, etc

Mathf.Clamp : 최소, 최대 넘어가지 않게 setting

{
   currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
   Debug.Log(currentHealth + "/" + maxHealth);
}

Getter 함수 : getter함수를 아래와 같이 사용할 수 있다.

public int health { get { return currentHealth; }}
    int currentHealth;

Pixels Per Unit : 크기 관련하여 사용하는데, 그냥 scale을 사용하면 되는게 아닌가..?

Unit : scene에서 눈금 한 칸이 1*1 unit 이다 참조 블로그

image-20220811220418870참조 블로그 이미지

Unit으로 컨트롤 하면 게임에서 Prefab을 만들 때 마다 일관된 크기로 사용할 수 있다. 즉 Pixels Per Unit으로 컨트롤은 스프라이트 자체에, scale은 Prefab에 적용이라고 생각할 수 있을듯

Game Object 생성과 내장 script 실행

 GameObject projectileObject = Instantiate(projectilePrefab, rigidbody2d.position + Vector2.up * 0.5f, Quaternion.identity);

    Projectile projectile = projectileObject.GetComponent<Projectile>();
    projectile.Launch(lookDirection, 300);

4. Animator

Animation : 하나의 애니메이션 클릭

Animator : 애니메이션 시스템 (이 component를 넣고 controller를 여기에 할당한다)

Animator Controller : 애니메이션 클립끼리의 연결을 담당

2D에서 animation 만드는 방법은 천천히 보면서 공부할 필요는 있으나, 보통 구입하는 어셋에는 미리 다 되어 있음, 필요할 때 공부하는걸로 하자

  • 코드 사용방법

    Animator animator;
    animator = GetComponent<Animator>();
      
    animator.SetFloat("Move X", 0);
    animator.SetFloat("Move Y", direction);
    //SetInt, SetBoolean 등도 있다.
    
  • 방향 관련 공부도 필요하다 예제는 방향 벡터를 이용해 바라보는 방향을 정하고 animation을 변경했다.

    if(!Mathf.Approximately(move.x, 0.0f) || !Mathf.Approximately(move.y, 0.0f))
    {
        lookDirection.Set(move.x, move.y);
        lookDirection.Normalize();
    }
    

5. Input System

Input.GetButtonDown : 터치 및 클릭을 다 받을 수 있음


6. 레이어 및 충돌

총돌 문제에 대한 좋은 해결책은 레이어를 활용하는 것이다. Group화 하여 필터링 할 수 있음

  1. layer를 만들어 prefab들에 할당한다.
  2. 물리 시스템에 캐릭터(layer1)와 투사물(layer2)이 충돌하지 않는다고 알려줌 위치 : Edit > Project Settings > Physics 2D

7. Package

유니티에서 제공하는 패키지가 있다.

시네머신(Cinemachine) : 카메라를 컨트롤 하는 패키지로, 2D 헬퍼 라고 카메라의 바운드를 제한하여 외부오브젝트를 표시하지 않도록 할 수 있음, 이런 패키지에 대해 알아두면 좋을것 같음


8. Particle

직접 파티클 만들어 보고 싶으면 여기 를 참조하자


9. 레이캐스팅

레이를 써서 충돌의 여부를 확인할 수 있는 건데 다양한 api가 있고 이에 대해선 따로 공부를 해야할 필요가 있다.

글자색 sample

fire brick

violet

drak green

medium blue

dark quoise

fire brick

violet

drak green

medium blue

dark quoise

🔔 포스팅 공지
ㅁㅇㄴㄻㄴㅇ

태그:

카테고리:

업데이트: