내일배움캠프 Unity 9기/TIL

[Unity/TIL] - 캐릭터 이동 / 충돌 설정 / 랜덤위치에 생성 / UI 반영

song-ssi 2025. 4. 7. 15:44

캐릭터 움직이기

 

 

x축 이동

transform.position += Vector3.right

  • Vetor3.right → Vector3(1, 0, 0); 사용하기 편하게 유니티에서 제공하는 변수!
  • Vetor3 (x,y,z)→ x,y,z 의 3 차원 값
  • 뒤에 * 를 붙여 속도 조절 가능
void Update()
{
    // 매 프레임마다 게임 오브젝트를 오른쪽으로 1 단위씩 이동
    transform.position += Vector3.right;
}

 

 

캐릭터 속도 일정하게 맞추기

Application.targetFrameRate

  • 기기 성능과 관계없이 1초에 60번만 호출/계산하도록 고정!
void Start()
{
    Application.targetFrameRate = 60;
}

 

 

벽에 충돌시 반대 방향으로 가게하기

float direction = 0.05f;

void Update()
{
    if (transform.position.x > 2.6f)
    {
        direction = -0.05f;
    }
    if (transform.position.x < -2.6f)
    {
        direction = 0.05f;
    }
    transform.position += Vector3.right * direction;
}

 

 

벽에 충돌시 캐릭터 이미지 좌우반전 시키기

renderer.flipX = true (or false)

SpriteRenderer renderer;          // 컴포넌트를 담아줄 변수(박스)를 만들고

void Start()
{
    renderer= GetComponent<SpriteRenderer>();    // 시작할 때 넣어준다.
}

void Update()
{	
    (조건)
    renderer.flipX = true;(or false)
}

 

 

마우스 클릭시 방향 바꾸기

Input.GetMouseButtonDown

  • ! 는 불값을 반전시킴 (true(체크) -> false(체크해제) 로 바꿈)
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        direction *= -1;
        renderer.flipX = !renderer.flipX;
    }

}

 

 

 

 

빗방울 만들기

 

 

땅에 충돌시 없어지게 하기 (충돌 세팅)

Destroy(gameObject)

  1. 충돌의 기본 조건은 둘 다 Collider 가 있어야 한다.
  2. 둘 중 하나는 Rigidbody가 있어야 한다.▶
  • CompareTag는 Unity에서 게임 오브젝트가 특정 태그를 가지고 있는지를 확인하는 메서드이다. 충돌한 게임 오브젝트가 ( )태그를 가지고 있는지 확인한다. 이 메서드는 성능이 최적화되어 있어 gameObject.tag == "Ground"보다 더 빠르고 효율적이다.
void Update()
{
}

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {
        Destroy(gameObject);
    }
}

 

 

랜덤한 위치에 생성되게 하기

void Start()
{
    float x = Random.Range(최소값, 최대값);
    float y = Random.Range(최소값, 최대값);
    transform.position = new Vector3(x, y, z);
}

 

 

빗방울 복제하기

  1. GameManager 오브젝트, 스크립트 생성
  2. 빗방울을 Prefabs로 생성
public GameObject rain;

   3. GameManager 스크립트 rain에 빗방울 Prefabs를 끌어다놓기.

void Start()
{
    InvokeRepeating("MakeRain", 0, 1f); //(복제할것, 시작시간, 시간간격)
}
void Update()
{
}

void MakeRain()
{
    Instantiate(rain);
}

  4. instantiate 복제한다.

 

 

 

 

점수 계산 - UI 이용

 

UI는 Canvas라는 도화지 위에 그려지고, 카메라 위치와는 관계가 없이 보여집니다.

→ 버튼 / 텍스트 / 순위를 보여줄 때에만 써줍니다. 🙂

 

 

싱글톤화

public static GameManager Instance;

public void Awake()
{
    Instance = this;
}
void Start()
{
}

 

 

캐릭터와 충돌시 점수 올라가게 하기

int totalScore = 0;


public void AddScore(int score)
{
    totalScore += score;
}
void Update()
{
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            GameManager.Instance.AddScore(score);
        }
    }
}

 

 

UI Text 받기

using UnityEngine.UI;

public Text totalScoreTxt;

 

 

점수가 오를 때마다 Text 바꿔주기

public void AddScore(int score)
{
		totalScore += score;
    totalScoreTxt.text = totalScore.ToString();
}