빗물 피하기 게임 03/21

정광훈(Unity_9기)·2025년 3월 21일

TIL (Today I Learned)

목록 보기
3/110
post-thumbnail

<스크립트 기본 틀>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rtan : MonoBehaviour
{
// Start is called before the first frame update (최초 1회만 실행)
void Start()
{

}

// Update is called once per frame (1프레임당 계속 업데이트)
void Update() 
{

}

}

●축 이동
transform.position += Vector3.right * direction; 에서 Vector3는(x, y, z)축을 의미한다.
Vector3.right는(1, 0, 0)을 의미하고, left는 (-1, 0, 0)을 의미한다.
Vector3.right direction;은 direction = 0.05일 경우, (1 x 0.05, 0 x 0.05, 0 x 0.05)가 된다.

●마우스 클릭(조건문)

GetMouseButtonDown은 마우스 버튼을 눌렀을 때, GetMouseButton은 마우스 버튼을 누르는 동안, 그리고 GetMouseButtonUp은 누르던 마우스 버튼을 뗐을 때 true를 반환한다.

GetMouseButtonDown(0) = 마우스 좌클릭 / GetMouseButtonDown(1) = 마우스 우클릭 / GetMouseButtonDown(2) = 마우스 휠클릭

출처: https://hotsunchip.tistory.com/5

●Sprite Renderer 제어

1) Sprite Renderer component 사용하기 위한 선언,초기화

public SpriteRenderer renderer; // Sprite Renderer 선언
renderer = GetComponent(); // 게임오브젝트의 Sprite Renderer 컴포넌트 가져오기
2) Flip

Flip의 x는 좌우, y는 상하반전이다.
renderer.flipX = true; // true는 flip체크, false는 체크해제

ex)

출처: https://allaboutmakers.tistory.com/21

● Rigidbody 2D
Rigidbody 2D는 물리에 필요한 다양한 힘들을 적용시키는데 사용하는 컴포넌트다. (중력, 마찰력, 물체의 무게값 같은)
추가 후
적용시키면 Rain이 중력을 받고 아래로 떨어지게 된다.● Circle Collider 2D / Box Collider 2D
Rigidbody 2D를 적용 후 실행시켜 보면 Ground에 멈추지 않고 뚫고 떨어질 것이다.
그래서 충돌 현상을 구현하는 Circle Collider 2D를 이용한다. (Rain이 원이기 때문에 Circle Collider 2D로 만들어야 한다.)추가 후이제 Ground에도 똑같이 Circle Collider 2D를 적용시켜 서로 충돌이 되게 만들어준다. (★Ground는 네모로 만들었기 때문에 Box Collider 2D로 만들어준다.)
그래야 Rain과 Ground가 충돌 했을 시 구체가 Ground에 멈추게 된다.● Ground와 충돌 후 Rain 파괴
public class Rain : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
    
}

private void OnCollisionEnter2D(Collision2D collision) // 충돌 상황에서 사용
{
    if (collision.gameObject.CompareTag("Ground")) // 태그에 Ground 값이 있을 때 실행
    //if(collision.gameObject.name == "Ground")는 collision 이 적용된 게임 오브젝트의 네임이 Ground 와 같다면 실행
    {
        Destroy(this.gameObject); // this는 Rain 스크립트가 붙어있는 자기 자신을 의미
    }
}

}

Rain이 Ground에 충돌 후에 계속 남아있으면 안 되기 때문에 제거를 해줘야 한다.
충돌 구현은 따로 정해진 자리가 있기 때문에 void Update()안에 사용하지 않는다.

private void OnCollisionEnter2D(Collision2D collision)
On: 이벤트가 발생할 때 사용을 의미
CollisionEnter: 충돌이 시작되는 그 순간을 의미

  1. if (collision.gameObject.CompareTag("Ground")) 는 태그에 Ground 가 있을 때 실행,
    게임 오브젝트의 이름이 바뀌면 사용할 수 없으므로 2번 방법을 사용할 수도 있다.
  2. if(collision.gameObject.name == "Ground") 는 collision 이 적용된 게임 오브젝트의 네임과 같을 때 실행

이렇게 2가지 방법으로 사용할 수 있다.

2번을 적용하기 위해서는 태그를 지정해줘야 하는데
태그는 처음에 Untagged로 되어있다. 태그가 지정이 안 되어있다는 뜻Add tag를 통해 tag를 추가시켜주면 끝1번을 누르고 -> 2번의 이름을 Ground로 변경 -> 3번을 눌러 저장하면 적용이 된다.

0개의 댓글