Unity 7일차 학습

규수·2026년 3월 25일

개발 공부 일지

목록 보기
18/44

오늘은 삼각함수를 통한 발사체의 궤적이나 물체의 움직임을 더 다양하게 조절하는 방법과 방대한 데이터를 효율적으로 관리할 수 있는 Dictionary에 대해 정리해보겠습니다.

1) Mathf.Cos

Mathf.Cos는 입력받은 각도(라디안)에 대한 코사인 값을 반환하는 함수입니다. 단위 원에서 X축의 좌표값을 의미하며, -1에서 1 사이의 값을 반복해서 출력합니다.

게임에서는 주로 원형 이동의 X축 좌표를 계산하거나, 좌우로 왕복하는 진동 운동을 구현할 때 사용합니다.
예를 들어, 캐릭터 주변을 빙글빙글 도는 위성 아이템을 만들 때 X좌표를 담당합니다.

<style>
using UnityEngine;

public class CosMovement : MonoBehaviour
{
    public float speed = 2.0f;
    public float length = 3.0f;

    void Update()
    {
        // 시간에 따라 -3에서 3 사이를 좌우로 왕복 이동
        float xPos = Mathf.Cos(Time.time * speed) * length;
        transform.position = new Vector3(xPos, 0, 0);
    }
}
</style>

2) Mathf.Sin

Mathf.Sin은 입력받은 각도(라디안)에 대한 사인 값을 반환하는 함수입니다. 단위 원에서 Y축의 좌표값을 의미하며, 코사인과 마찬가지로 -1에서 1 사이를 오갑니다.

게임에서는 물체가 위아래로 둥둥 떠 있는 효과(Floating), 원형 이동의 Y축 좌표, 혹은 파동(Wave) 형태의 궤적을 그리는 발사체를 만들 때 필수적으로 사용됩니다.
Cos와 Sin을 함께 사용하면 완벽한 원운동을 구현할 수 있습니다.

<style>
using UnityEngine;

public class SinMovement : MonoBehaviour
{
    public float speed = 2.0f;
    public float height = 0.5f;

    void Update()
    {
        // 물체가 위아래로 부드럽게 둥둥 떠 있는 효과
        float yPos = Mathf.Sin(Time.time * speed) * height;
        transform.position = new Vector3(transform.position.x, yPos, transform.position.z);
    }
}
</style>

3) C# Dictionary

Dictionary는 키(Key)와 값(Value)이 한 쌍으로 이루어진 자료구조입니다.
리스트가 번호(인덱스)로 데이터를 찾는다면, 딕셔너리는 우리가 지정한 고유한 별명(키)으로 데이터를 직접 찾아냅니다.

  • 특징:
  1. 키의 중복을 허용하지 않습니다.
  2. 내부적으로 해시 테이블을 사용하기 때문에 많은 데이터 속 키를 통해 즉시 값을 찾아낼 수 있습니다.
  • 사용시기:
  1. 아이템의 이름을 키로 해서 아이템 정보를 찾기
  2. 몬스터의 ID로 몬스터 객체를 불러올 때
  3. 플레이어의 점수를 저장하는 스코어보드 시스템

Dictionary는 데이터를 다룰 때 '안전성'이 가장 중요합니다.
만약 없는 키를 호출하면 에러가 발생하는 문제가 발생하게 됩니다.

<style>
using System.Collections.Generic; // 딕셔너리 사용을 위해 필수
using UnityEngine;

public class DictionaryBase : MonoBehaviour
{
    // Key는 문자열(이름), Value는 정수(점수)인 딕셔너리 선언
    Dictionary<string, int> scores = new Dictionary<string, int>();

    void Start()
    {
        // 데이터 추가
        scores.Add("Player1", 100);
        scores["Player2"] = 250; // 이 방식도 가능
    }
}
</style>

4) Dictionary 활용 코드

Dictionary의 활용 방식은 다음과 같습니다.

  • 값 안전하게 읽기: TryGetValue를 사용하면 키가 있는지 확인하고 값을 동시에 가져올 수 있어 에러를 방지하는 방어 코드 작성이 가능합니다.

  • 값 증가시키기: 기존 값이 있는지 확인하고, 있으면 수정하고 없으면 새로 추가하는 로직이 자주 쓰입니다.

  • 전체 출력하기: foreach문을 사용하여 딕셔너리에 담긴 모든 데이터를 순회할 수 있습니다.

<style>
using System.Collections.Generic;
using UnityEngine;

public class DictionaryAdvanced : MonoBehaviour
{
    Dictionary<string, int> inventory = new Dictionary<string, int>();

    void Start()
    {
        inventory.Add("Potion", 5);
        inventory.Add("Gold", 1000);

        // 1. 값 안전하게 읽기
        if (inventory.TryGetValue("Potion", out int count))
        {
            Debug.Log("포션 개수: " + count);
        }

        // 2. 값 수정 및 증가 (기존 값에 더하기)
        if (inventory.ContainsKey("Gold"))
        {
            inventory["Gold"] += 500;
        }

        // 3. 전체 데이터 출력
        foreach (KeyValuePair<string, int> item in inventory)
        {
            Debug.Log("아이템: " + item.Key + ", 보유량: " + item.Value);
        }
    }
}
</style>

오늘은 삼각함수(Sin, Cos)의 활용방법과 Dictionary에 대해 학습하였습니다.

특히 기존의 List만 배웠을 때는 기존의 값에서 수량을 증가시킨다거나 혹은 List전체를 순회하여 동일한 이름의 수량을 합치는 방식 등으로 인벤토리를 관리한다고 생각하였는데,
Dictionary를 활용하면 더 적은 메모리를 사용하면서 확실하게 찾아낼 수 있다라는 점이 인상적이었습니다.

0개의 댓글