[점펠로프] 줄넘기 애니메이션 충돌 감지하기

Yerin·2022년 5월 19일
0

게임 제작 스터디

목록 보기
2/3
post-thumbnail

해당 글의 최종 목표는 캐릭터가 줄에 걸리면 충돌을 감지하고, 놀라는 애니메이션으로 모션이 바뀌는 것입니다.

1. 줄돌이 캐릭터 및 애니메이션 추가

먼저 줄을 돌리는 캐릭터를 로드해 애니메이션을 만들어줍니다.
애니메이션 적용 방법은 [점프 애니메이션 적용하기] 포스팅에 나와있습니다.

단순히 애니메이션만 적용했기때문에 뛰는 캐릭터에는 아무런 변화도 일어나지 않습니다.

2. 충돌 감지하기

줄이 땅에 닿았을 때 뛰는 캐릭터와 닿으면 충돌을 감지할 것이기 때문에, 줄돌이 캐릭터의 collider는 아래와 같은 형태입니다.

이제 줄돌이 캐릭터를 클릭하고 애니메이션 창을 열어 줄이 땅에 닿았을 때만 collider가 활성화 되도록 합니다.

Add Property를 눌러 Collider 2D.Enabled 속성을 추가합니다.
녹화버튼을 누른 뒤, 재생바를 움직여 줄이 땅에 닿았을 때 enabled 속성이 체크되도록 만들어줍니다.

이때 줄돌이 캐릭터의 collider 속성에 is Trigger를 체크해야합니다.
줄에 닿았을때 감지는 하지만 그대로 통과해야하기 때문입니다.

3. 충돌 시 뛰는 캐릭터 애니메이션 변경

[점프 애니메이션 적용하기] 에서 isJumping 변수를 추가했던 것처럼 isDamaged 변수를 추가합니다.
또한 줄에 걸렸을 때 애니메이션도 추가하여 이어주고, 속성도 아래와 같이 체크해줍니다.

isJumpingisDamaged
Idle ->Damagedfalsetrue
Idle -> Jumptruefalse
Jump -> Idlefalsefalse
Jump -> Damagedfalsetrue
Damaged -> Idlefalsefalse
Damaged-> Jumptruefalse

이제 뛰는 캐릭터에 적용할 스크립트를 작성해 줍니다.
줄을 돌리는 캐릭터의 layout은 9, 뛰는 캐릭터의 layoyt은 7로 미리 설정하였습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    Rigidbody2D rigid;
    Animator anim;
    SpriteRenderer spriteRenderer;

    // Start is called before the first frame update
    void Awake()
    {
        rigid = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        spriteRenderer = GetComponent<SpriteRenderer>();
    }


    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.layer == 9)
        {
            Debug.Log("줄 걸림");
            OnDamaged();
        }
    }

    void OnDamaged()
    {
        gameObject.layer = 8; // PlayerDamaged
        anim.SetBool("isDamaged", true);
        Invoke("OffDamagedAnim", 0.5f);
        Invoke("OffDamaged", 3f);
    }

    void OffDamagedAnim()
    {
        anim.SetBool("isDamaged", false);
        spriteRenderer.color = new Color(1, 1, 1, 0.5f);

    }

    void OffDamaged()
    {
        gameObject.layer = 7; // Player
        spriteRenderer.color = new Color(1, 1, 1, 1);
    }

}

profile
재밌는 코딩 공부

0개의 댓글