2025년 1월 6일 월요일

3. 김치런 게임 Mover .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI

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

public class Mover : MonoBehaviour
{
    [Header("Settings")]
    public float moveSpeed; // 이동 속도를 설정하기 위한 변수

    // Update is called once per frame
    void Update()
    {
        // 게임 오브젝트를 왼쪽으로 이동
        transform.position += Vector3.left * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
    }
}


코드 구조 및 주요 기능

  1. 플레이어 점프 처리:

    • Update()에서 스페이스바 입력 감지 후, Rigidbody2D에 위쪽으로 힘을 가해 점프.
    • isGrounded를 이용해 플레이어가 땅에 닿아있을 때만 점프 가능.

코드 분석

  1. Settings 섹션:

    • moveSpeed: 게임 오브젝트의 기본 이동 속도를 설정하기 위한 변수이지만, 현재 코드에서는 사용되지 않고 있음.
  2. Update() 메서드:

    • 매 프레임마다 transform.position을 변경하여 오브젝트를 왼쪽으로 이동시킴.
    • 이동 속도는 GameManager.Instance.CalculateGameSpeed() 메서드에 의해 동적으로 계산됨.
    • Time.deltaTime을 곱해 프레임 속도에 관계없이 일정한 속도로 이동하도록 설정.
  3. GameManager와 연동:

    • GameManagerCalculateGameSpeed() 메서드를 호출해 게임의 현재 속도에 따라 오브젝트의 이동 속도를 조정.
    • 이 구조를 통해 게임이 진행될수록 점점 더 빠르게 이동하도록 설정.

코드 동작

  • 게임 내에서 장애물이나 배경 요소와 같은 오브젝트들이 왼쪽으로 이동하는 동작을 구현.
  • GameManager의 게임 상태에 따라 이동 속도가 동적으로 변경되며, 게임 난이도가 조절됨.

개선 사항

  1. moveSpeed 변수 활용:

    • moveSpeed를 기본 이동 속도로 사용하고, 이를 GameManager.Instance.CalculateGameSpeed()와 결합하여 속도를 조절할 수 있음.
      transform.position += Vector3.left * moveSpeed * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
  2. 게임 상태 확인 추가:

    • GameManager의 상태에 따라 움직임을 멈추거나 다르게 처리할 수 있음. 예를 들어, 게임이 GameState.Dead 상태일 때 오브젝트를 멈추도록 설정:
      if (GameManager.Instance.State == GameState.Playing) { transform.position += Vector3.left * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime; }
  3. 이동 방향 변경:

    • 현재는 오브젝트가 왼쪽(Vector3.left)으로만 이동하지만, 게임 디자인에 따라 다른 방향으로도 이동할 수 있도록 확장 가능.

최종 구현 예시 (개선 반영):


using System.Collections; using System.Collections.Generic; using UnityEngine; public class Mover : MonoBehaviour { [Header("Settings")] public float moveSpeed = 1f; // 기본 이동 속도 // Update is called once per frame void Update() { if (GameManager.Instance.State == GameState.Playing) { // 이동 방향: 왼쪽으로 기본 속도와 게임 속도를 곱하여 이동 transform.position += Vector3.left * moveSpeed * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime; } } }

이 코드는 GameManager의 상태를 확인하고, moveSpeed와 게임 속도를 결합하여 더 유연한 이동 속도 조정이 가능합니다.

댓글 없음:

댓글 쓰기

-


Sidewinder


World


FishMusic


LaughingBaby