1 minute read


1. 미로 만들기


Cube를 만든후 이름을 Wall로 바꾼후 다음과 같이 사이즈 조절을 해준다.


이후 이 벽을 복사후 사용하여 자유롭게 미로를 만든다. 또한 간단하게 구별하기 위하여 다음과 같이 Tag를 변경해 주었다.


tag

image


벽을 활용하여 미로를 만들었다. 추가적으로 새로운 에셋을 이용하여 캐릭터의 외향을 바꿔준 후 땅 색상과 벽을 바꿔 주었다.
도착지에는 Cylinder를 활용하여 꾸며주었다.


image


이때 도착지에 투명한 광선 표시를 위하여 다음과 같이 새로운 light material을 만든후 Shader의 UI/Unlit/Transparent를 고른 후 Alpha값을 변경해 주었다. (RGBA의 A 값)


image


이후 다음과 같이 Player에게 RigidbodyCollider를 추가해주면 잘 움직이는 것을 볼 수 있다.


image


2. Player Jump 추가


Player script로 들어간 후 Start함수에 다음 코드를 추가한ㄷ.

void Start()
{
    PlayerJump = 8;
    PlayerSpeed = 10;
    rigid = GetComponent<Rigidbody>();
}

이후 플레이어의 점프를 위하여 다음과 같은 함수를 추가해준다.

void Jump()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rigid.AddForce(Vector3.up * PlayerJump, ForceMode.Impulse);
    }

}

그러면 플레이어가 점프를 하는 것을 볼 수 있다.
하지만 한가지 문제가 발생한다.
바로 캐릭터가 공중에서 여러번 점프가 가능해지는 것이다.
이를 해결하기 위하여 점프는 땅에서만 가능하도록 script 맨 위에 isGround라는 bool 변수를 추가해주고, Jump() 함수를 다음과 같이 변경해준다.


void Jump()
{
    if (Input.GetKey(KeyCode.Space) && isGround)
    {
        rigid.AddForce(Vector3.up * PlayerJump, ForceMode.Impulse);
        isGround = false;
    }
}

또한 땅에 닿았을때, isGround를 true로 바꿔주기 위하여 다음과 같은 함수를 사용해주면 된다.

private void OnCollisionEnter(Collision collision)
{
    if (collision.collider.CompareTag("Ground"))
    {
        isGround = true;
        print("ground");
    }
}


3. Trap 만들기


만들어둔 벽을 이용하여 다음과 같이 Trap을 만들어 주었다.
새롭게 Trap Tag도 만들어서 설정해주었다.


image


이후에 이 Trap이 움직이기 위하여 새로운 Trap Script를 만들어 주었다.

이후 Trap Script의 맨위에 다음과 같은 변수를 만들어 주었다.
이후 Start()함수에서 초기화를 해주었다.

public float TrapSpeed;
private float Move;
public int max_x;
public int min_x;

void Start()
{
    TrapSpeed = 0.1f;
    Move = TrapSpeed;
}

이후 Trap의 움직임을 위한 TrapMove()함수를 만들어준 후 TrapMove();Update문에 추가해주었다.

void TrapMove()
{
    if (max_x < transform.position.x)
    {
        Move = -TrapSpeed;
    }
    else if(min_x > transform.position.x)
    {
        Move = TrapSpeed;
    }
    transform.position += new Vector3(Move, 0, 0);
}


image

위와 같은 코드를 적용시킨 후 벽마다 Trap Script를 만들어준 후, Max_xMin_y를 설정해주면 된다.


trap

이후 잘 작동하는 모습이다.


4. Trap에 닿으면 처음 위치로 이동하기


Player가 Tag가 Trap인 물체에 닿으면 처음 위치로 이동하기 위하여 Player Scriptprivate void OnCollisionEnter(Collision collision) 의 함수에 다음과 같이 코드를 추가해 주면 된다.
이동하는 위치는 자유롭게 설정하여도 좋다.

if (collision.collider.CompareTag("Trap"))
    {
        transform.position = new Vector3(-20, 2, -20);
    }


trap2

이후 다음과 같이 잘 작동하는 모습이다.



개인 공부 기록용 블로그입니다.
틀리거나 오류가 있을 경우 제보해주시면 감사하겠습니다.😁