Menu
CoddyTech

공유 설정

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 25번째.

난이도 설정은 모든 적을 한 번에 바꾸므로, 모든 적이 참조하는 하나의 에셋에 적합합니다. 각 적은 매 프레임 에셋의 속도를 읽고, 메뉴의 Hard 버튼은 같은 에셋에 값을 씁니다:

[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
    public float enemySpeed = 2f;
}
public class Enemy : MonoBehaviour
{
    public Difficulty difficulty;
    public Transform player;

    void Update()
    {
        float step = difficulty.enemySpeed * Time.deltaTime;
        transform.position = Vector3.MoveTowards(transform.position, player.position, step);
    }
}
// DifficultyMenu.cs, Hard 버튼의 onClick에 연결됨
public Difficulty difficulty;

public void SetHard()
{
    difficulty.enemySpeed = 4f;
}

적들의 필드와 메뉴의 필드는 하나의 에셋을 참조하므로, SetHard()를 실행한 뒤 다음 Update부터 모든 적은 4를 읽습니다. 나중에 필드에 해당 에셋이 들어 있는 프리팹에서 생성된 적도 포함됩니다. 각 적이 이동할 때 difficulty.enemySpeed를 읽기 때문에 이렇게 작동합니다. Start에서 이 값을 자기 필드에 복사한 적은 2로 계속 이동합니다.

게임 중 변경 사항이 어디에 반영되는지는 게임이 실행되는 위치에 따라 달라집니다. 빌드는 시작할 때마다 빌드 시점의 에셋을 불러오므로, 플레이어가 선택한 Hard 설정은 다음 게임에서는 사라집니다. 선택을 유지하려면 PlayerPrefs로 저장하고 게임이 시작될 때 에셋에 다시 기록하세요. Editor에서는 프로젝트의 에셋이 게임이 변경하는 대상이며, Stop을 눌러도 변경 사항이 유지됩니다. Inspector 값으로 되돌아가는 씬의 오브젝트와는 다릅니다. 다음 ‘플레이’는 Hard 설정으로 시작하며, 값을 되돌릴 때까지 에셋은 4를 유지합니다.

challenge icon

챌린지

중급

하나의 에셋을 공유하여 화살표로 모든 보트의 바람을 바꾸세요.

  1. Sailboat에서 windStrength를 public WindSettings wind;로 바꾸고 wind.strength에 따라 항해하게 하세요.
  2. WindVane에서 strength를 public WindSettings wind;로 바꾸세요.
  3. 화살표로 wind.strength(0~5)를 바꾸고 텍스트에 Wind: 3처럼 표시되게 하세요.

‘플레이’를 누른 다음 위쪽 화살표를 누르세요. 보트 세 대가 모두 속도를 높입니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class WindVane : MonoBehaviour
{
    public TMP_Text windText;
    public float strength = 2f;

    void Start()
    {
        Show();
    }

    void Update()
    {
        if (Keyboard.current.upArrowKey.wasPressedThisFrame)
        {
            strength = Mathf.Min(strength + 1f, 5f);
            Show();
        }
        if (Keyboard.current.downArrowKey.wasPressedThisFrame)
        {
            strength = Mathf.Max(strength - 1f, 0f);
            Show();
        }
    }

    void Show()
    {
        windText.text = "Wind: " + strength;
    }
}

Unity 게임 아키텍처의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드