⛳ Maze 만들기 3
1. 미로 만들기
새 Cube
를 만든후 이름을 Wall로 바꾼후 다음과 같이 사이즈 조절을 해준다.
이후 이 벽을 복사후 사용하여 자유롭게 미로를 만든다.
또한 간단하게 구별하기 위하여 다음과 같이 Tag
를 변경해 주었다.
벽을 활용하여 미로를 만들었다. 추가적으로 새로운 에셋을 이용하여 캐릭터의 외향을 바꿔준 후 땅 색상과 벽을 바꿔 주었다.
도착지에는 Cylinder를 활용하여 꾸며주었다.
이때 도착지에 투명한 광선 표시를 위하여 다음과 같이 새로운 light material
을 만든후 Shader의 UI/Unlit/Transparent
를 고른 후 Alpha
값을 변경해 주었다. (RGBA의 A 값)
이후 다음과 같이 Player에게 Rigidbody
와 Collider
를 추가해주면 잘 움직이는 것을 볼 수 있다.
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
도 만들어서 설정해주었다.
이후에 이 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);
}
위와 같은 코드를 적용시킨 후 벽마다 Trap Script
를 만들어준 후, Max_x
와 Min_y
를 설정해주면 된다.
이후 잘 작동하는 모습이다.
4. Trap에 닿으면 처음 위치로 이동하기
Player
가 Tag가 Trap
인 물체에 닿으면 처음 위치로 이동하기 위하여 Player Script
의 private void OnCollisionEnter(Collision collision)
의 함수에 다음과 같이 코드를 추가해 주면 된다.
이동하는 위치는 자유롭게 설정하여도 좋다.
if (collision.collider.CompareTag("Trap"))
{
transform.position = new Vector3(-20, 2, -20);
}
이후 다음과 같이 잘 작동하는 모습이다.
개인 공부 기록용 블로그입니다.
틀리거나 오류가 있을 경우 제보해주시면 감사하겠습니다.😁