250214 TIL

박소희·2025년 2월 14일

Unity_7기

목록 보기
27/94
Flappy Plane

Camera

  • Projection - Orthographic: 원근감 없는 카메라
  • size: 설정해둔 수치만큼 상단부/하단부 설정, 가로 길이는 설정한 비율에 맞게 맞춰진다.

Animator

  • transition - Has Exit Time : 체크 해제 시 이전 애니메이션이 끝나지 않았더라도 해당 애니메이션 실행

Scene

  • v 누르고 이미지 이동하면 옆 이미지에 딱 붙는다.

GetComponentInChildren<>(): 하위 오브젝트의 컴포넌트 불러오기

Mathf.Clamp(기준, 최소값, 최대값): 기준점에서 변화하면 그에 맞게 수치 조정

transform.rotaton은 Quaternion 값 사용
Quaternion.Euler(x축, y축, z축)

  • Euler: 180˚와 같은 각도

Time.deltaTime: 이전 프레임과 현재 프레임 사이의 시간 반환

polygon collider: 사각, 원형이 아닌 복잡한 모양의 객체에 맞게 콜라이더 설정

마우스 입력이랑 스페이스 입력 되는 세기가 달랐다...

로컬 좌표와 월드 좌표 차이

  • 로컬 좌표: 부모 오브젝트를 기준으로 한 위치
  • 월드 좌표: 게임의 전체 월드에서의 위치

rigidbody2D - Kinematic: 물리적 연산 없이 충돌만 감지

지나간 장애물 앞으로 배치해서 맵 생성하기

public Vector3 SetRandomPlace(Vector3 없어지는 위치){
	float holeSize = 장애물 사이 랜덤 간격
    float halfHoleSize = holeSize / 2;
    
    위쪽 장애물 y값 = halfHoleSize 조정
    아래쪽 장애물 y값 = -halfHoleSize 조정
	
    새로운 위치 = 없어지는 위치 + 양옆 간격
    새로운 위치의 y 값 랜덤 조정
    
    현재 위치를 새로운 위치로 업데이트 시켜주기
    
    새로운 위치 반환

콜라이더는 오브젝트의 사이즈를 알고 있어서 가져올 수 있음.
Collider2D collision은 모든 콜라이더의 부모 클래스이기 때문에 box Collider의 것을 가져올 수 없다. -> collsion을 (BoxCollider2D)로 인덱싱하여 사이즈 가져올 수 있다.

지나간 배경 앞으로 보내기

  • 배경과 장애물이 10개씩 생성되니, 5개 단위로 끊어서 뒤로 보냄
    -> collision의 x좌표 장애물 너비의 5배만큼 뒤로 이동

싱글턴 패턴: 클래스의 인스턴스를 하나만 생성하도록 보장

  • static 변수나 속성을 통해 어디서든 동일한 인스턴스에 접근할 수 있음.

MonoBehavior 클래스를 상속 받는 클래스에 한해서 if문 조건 안에 참조형이 변수명을 넣을 수 있다. 변수가 null이면 false 아니면 true 반환.

The Stack

Directional Light: 전역으로 비춰지는 빛의 정도

Vector3.Lerp(시작 지점, 끝 지점, 시간(0~1)): 두 값 사이를 일정한 비율로 선형 보간

객체 지정된 범위에서 반복적으로 움직이기

  • Mathf.PingPong(): 지정 변수 안에서 양수값 반복
  • block.localPosition = new Vector3(movePosition * MovingBoundSize, Count, secondaryPosition); 축을 따라 움직이도록 지정

랜덤으로 색 뽑기

  • Random.Range(100f, 250f) / 255f로 rgb 값 랜덤 설정

색 부드럽게 바뀌게 하기
Color.Lerp(prevColor, nextColor, (Count % 11) / 10f)

블럭 안맞는 만큼 없애기

    bool PlaceBlock()
    {
        Vector3 lastPosition = 마지막 블럭 위치 저장

        if (X축으로 움직인다면)
        {
            float deltaX = 마지막 블럭의 x좌표 - 직전 블럭의 x좌표;

            deltaX = Mathf.Abs(deltaX); 음수값 방지
            bool isNegative = deltaX의 기호로 어느쪽으로 파편이 떨어져야 할지 정한다.
            if (deltaX가 Error 값보다 크다면) 그만큼 없앤다.
            {
            	블록의 x 길이 -= deltaX;
                0이라면 false 반환
                
                마지막 블럭과 직전 블럭 x좌표의 중앙값을 찾아 다음 블럭을 배치할 x를 구한다.
                직전 블럭의 크기를 남은 길이 만큼으로 줄인다.
              	직전 블럭을 중앙값으로 위치시킨다.
                
                isNegative에 따라 파편의 위치를 지정해 생성한다.
            }
            else Error 값 안에 들어왔다면
            {
                마지막 블럭에 직전 블럭을 맞춰 쌓는다.
            }
        }

       true 반환

없어진 파편 만들기

void CreateRubble(Vector3 pos, Vector3 scale)
{
    GameObject go = 직전의 블럭을 복제한다.
	생성한 블록을 상위 오브젝트로 넣어준다. (위치, 크기, 회전)
	생성한 블록에 Rigidbody 컴포넌트를 추가한다.
    go.name = "Rubble"; 이름 지정.

}

최고 점수 저장

string key 값을 만들어 값을 저장한다.
PlayerPrefs.GetInt(key, 0); // 저장된 값을 불러온다. 없다면 0 반환
PlayerPrefs.SetInt(key, value); // value로 값을 저장한다.

게임 오버시 쌓인 블럭이 무너지는 이펙트

int childCount = 하위 오브젝트 개수를 불러온다.
transform.GetChild(index)로 하위 오브젝트를 불러올 수있다.
불러온 오브젝트에 Rigidbody 컴포넌트를 추가하여 물리 상호작용이 가능하게 한다.
Rigidbody rigid;
rigid.AddForce(Vector3.up * 랜덤 값 + Vector3.right * 랜덤값); // 원하는 방향으로 힘

0개의 댓글