티스토리 뷰

반응형

Gamelog 05. 쉬운게 역시 재밌다.

키보드 조작보다 마우스로 클릭하는게 훨씬 간단한 느낌이었다. 아직 마우스로 클릭하는 초반이어서 그럴진 모르겠지만, 코드도 훨씬 간단하고 빙글빙글 돌아가고 클릭클릭 하는 느낌이 재밌었다!
역시 쉬운걸 잘하게 되고 잘하는게 재밌고 그런 것인가보다. 점점 잘해지면 어려운걸 잘하고 어려운게 재밌게 되는 날이 오겠지.

 

Gamelog 05_1. 마우스로 클릭해봤다.

마우스 터치는 충돌판정

마우스 터치는 Box Collider 2D를 사용하여 마우스와의 충돌로 표현할 수 있다.
OnMouseDown()이라는 함수를 사용하며, 게임 오브젝트와 마우스의 충돌 감지시 OnMouseDown()이 실행된다.
이때, OnMouseDown()은 컴퓨터의 마우스만 사용 가능하다.

스마트폰 터치의 경우, Raycast 사용
→ 게임 화면 터치시, 안쪽 방향으로 Ray를 쏘아 뭔가에 충돌하는지 조사하는 방식

if (Input.GetMouseButtonDown(0)) {
    var wPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    var hit = Physics2D.Raycast(wPos, Vector2.zero);
    if (hit) {
        if (hit.collider.gameObject.name == this.name) {
            // 할 것
        }
    }
}

 

마우스 터치시 사라지기

SetActive(false) 사용하여 사라지기 표현
이때는, 미리 false를 하는 것이 아니기 때문에 multi 설정해도 문제 없다

void MouseDown() {
    this.gameObject.SetActive(false);
}

Unity 마우스 터치시 사라지기

 

마우스 터치시 회전하기

마우스 터치 후 계속 회전하기 위해서는 FixedUpdate() 사용
마우스 터치를 그만하면 멈추도록 하기 위해서는 OnMouseUp() 사용

  • OnMOuseUp(): 마우스 터치를 그만하면 무언가를 한다.
public float angle = 360;
float rotateAngle = 0;

void OnMouseDown() {
    rotateAngle = angle;
}

void OnMouseUp() {
    rotateAngle = 0;
}

void FixedUpdate() {
    this.transform.Rotate(0, 0, rotateAngle/50);
}

Unity 마우스 터치시에만 회전하기

 

응용하여 룰렛돌리기

FixedUpdate()에 하기와 같은 값을 추가하여 점점 줄어들도록 구현가능

rotateAngle = rotateAngle * (float)0.98;

Unity 룰렛돌리기

 

Gamelog 05_2. 오브젝트 중첩 순서

중첩 순서 지정 3가지 방법

Sorting Layer: 가장 강력한 지정 방법

  • 레이어의 깊이에 따라 지정 가능
  • 제대로 설계할 때 적합한 방법

Unity Sorting Layer

  • Sorting Layer를 Sky - Ground - Default로 설정시,
    가장 아래에 있는 Default Layer가 가장 앞으로, 위에 있는 Sky Object Layer가 위로 나오게 된다.

 

Order in Layer: 같은 중첩 레이어 내에서 번호로 깊이를 지정하는 방법

  • Sky Object 둘다 0일 때

Sky Object 둘다 0일 때

  • Sky Object 뒤에 구름 10으로 변경시

Sky Object 뒤에 구름 10으로 변경시

 

Position Z: 같은 중첩 레이어 내에서 Order in Layer도 동일할 때 지정하는 방법

  • 메인 카메라와 거리가 가까울수록 앞에 위치하는 방법
  • 메인 카메라보다 앞쪽에 위치 필요 → -9.7 이상인 값
  • Transform의 Position Z의 값이 작을수록 가까움
    Transform의 Position Z의 값이 클수록 멈

Transform의 Position Z의 값 동일
Transform의 Position Z의 값 작게

TIP!
보이는 깊이는 앞쪽에 있어도, 터치할 때의 깊이가 다른 경우 있음.
EX) Order in Layer로 앞쪽에 표시했는데, 클릭시 안쪽에 있는 오브젝트가 반응하는 경우
→ 이런 경우에는 Position Z로 앞쪽에 표시하면 제대로 터치할 수 있게 됨

 

반응형
댓글