Unity

Unity) 범위(영역) 안에 들어오면 떨어지는 트랩

떵뚠 2023. 9. 18. 09:30
반응형

스파이크의 밑에 있는 스파이크의 밑에 있는 콜라이더 영역에 플레이어가 충돌하면 고정되어 있던 Y축이 고정이 풀리면서 떨어지도록 설계했다.

플레이어가 들어오는 영역(범위)는 당연히 Is Trigger를 활성화 해주어야 한다. 그래야 플레이어가 스무스하게 지나가다가 함정이 발동된다.

반면에 플레이어가 충돌해야하는 스파이크 본체에는 Is Trigger가 활성화되지 않는 모습을 볼 수 있다.

IS Trigger가 활성화되지 않아야 캐릭터가 스파이크와 직접 충돌하는 모습을 볼 수 있다.

 

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

public class SpikeTrap : MonoBehaviour
{
    public float SpikeDamge = 5.0f;
    Rigidbody2D rb;
    private float Count = 1;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag.Equals("Player"))
        {
            if(Count == 1)
            {
                Debug.Log("asdf");
                rb.constraints = RigidbodyConstraints2D.None;
                transform.position += new Vector3(0, -0.01f, 0);
                Count -= 1;
            }
        }
    }

    public void SpikeAttack()
    {
        GameObject playerObj = GameObject.Find("Player");
        Playermove player = playerObj.GetComponent<Playermove>();
        player.hp -= SpikeDamge;
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag.Equals("Player"))
        {
            Debug.Log("GGoong");
            SpikeAttack();
        }
    }
}

transform.position += new Vector3(0, -0.01f, 0);

이 부분을 추가한 이유는 RigidbodyConstraints2D.None을 해서 게임을 플레이 해봐도 Y축이 계속 고정되어있는 모습을 볼 수 있었다. 이유는 모르겠지만 이를 해결하기위해 좌표에 변환을 줘봤는데 잘 작동했다.

Y축이 고정된 이유와 이보다 더 좋은 방법이 있으면 훈수 환영합니다.

반응형