
Unity에서 변수를 추가하여 게임 오브젝트의 움직임을 더욱 유연하게 조절하는 방법에 대해 자세히 알아보겠습니다. 변수를 사용하면 숫자를 더 쉽게 관리하고, 자동차와 같은 오브젝트의 움직임을 다양하게 변경할 수 있습니다.
우리가 만든 자동차는 현재 고정된 속도와 회전만을 가지고 있습니다. 즉, 엑셀을 밟아 속도를 높이거나, 좌우로 회전하는 등의 동적인 움직임을 구현하지 못하고 있습니다. 왜 그럴까요?
그 이유는 바로 하드코딩(hardcoding) 때문입니다. 하드코딩이란, 코드 안에 값을 직접 입력하여 수정이 어렵게 만드는 것을 의미합니다. 이렇게 하면 값을 변경하려면 매번 코드를 수정해야 하므로 비효율적입니다.
이 문제를 해결하기 위해 변수를 사용해보겠습니다. 변수는 데이터를 저장하고 조작하며, 필요할 때 참조할 수 있는 일종의 상자라고 생각하면 됩니다. 변수를 사용하면 코드의 유연성이 높아지고, 유지보수가 쉬워집니다.
변수는 세 가지 주요 요소로 구성됩니다:
예를 들어, hitPoints라는 변수가 있다고 해봅시다:
int hitPoints = 20;
hitPoints20int (정수형)여기서 hitPoints는 현재 20이라는 값을 가지고 있으며, 게임 캐릭터의 체력을 나타낼 수 있습니다. 이 값은 상황에 따라 0이 될 수도 있고, 100이나 그 이상이 될 수도 있습니다.
변수는 저장하는 데이터의 종류에 따라 다양한 자료형이 있습니다. 주요 자료형은 다음과 같습니다:
-10, 0, 42f를 붙입니다. 예: 3.14f, 0.01ffloat보다 더 많은 소수점 자리수를 표현할 수 있습니다. 소수점 아래 약 15자리까지 가능합니다. 예: 3.141592653589793true 또는 false의 값만 가질 수 있습니다. 논리적인 상태를 나타낼 때 사용합니다."로 값을 감쌉니다. 예: "Hello, World!"변수를 선언하고 값을 지정하는 방법은 다음과 같습니다:
자료형 변수이름 = 값;
예를 들어:
float 변수 선언:
float speed = 3.8f;
여기서 speed라는 이름의 float 변수를 선언하고 3.8f라는 값을 대입했습니다.
bool 변수 선언:
bool isAlive = true;
isAlive라는 이름의 bool 변수를 선언하고 true 값을 대입했습니다.
string 변수 선언:
string myName = "Rick";
myName이라는 string 변수를 선언하고 "Rick"이라는 문자열을 대입했습니다.
변수 이름을 지을 때는 카멜 표기법(camelCase)을 사용합니다:
예:
hitPointsmoveSpeedsteerSpeed이제 실제로 Unity 프로젝트에서 변수를 추가해보겠습니다.
steerSpeed 변수 추가자동차의 회전 속도를 조절하기 위해 steerSpeed 변수를 선언하겠습니다.
클래스 내부에 변수 선언: 스크립트 파일에서 Start() 메서드 위에 다음 코드를 추가합니다.
float steerSpeed = 0.1f;
여기서 steerSpeed는 자동차의 회전 속도를 나타내며, 초기 값은 0.1f입니다.
Update() 메서드에서 변수 사용: 기존에 하드코딩된 값 대신 변수를 사용합니다.
transform.Rotate(0, steerSpeed, 0);
이렇게 하면 steerSpeed의 값을 변경하여 회전 속도를 쉽게 조절할 수 있습니다.
moveSpeed 변수 추가이번에는 여러분이 직접 해볼 차례입니다. 자동차의 이동 속도를 조절하는 moveSpeed 변수를 추가하고, transform.Translate() 메서드에서 이 변수를 사용해보세요.
힌트:
변수 선언:
float moveSpeed = 0.01f;
변수 사용:
transform.Translate(0, 0, moveSpeed);
과제를 완료했다면 스크립트를 저장하고 Unity로 돌아가서 실행해보세요. 자동차가 이전과 동일하게 움직이는지 확인해보세요.
변수의 값을 변경하면 오브젝트의 동작이 어떻게 달라지는지 확인해볼 수 있습니다.
steerSpeed 값 변경steerSpeed의 값을 1f로 변경해봅시다:
float steerSpeed = 1f;
float 변수에 정수 값을 대입할 때는 f를 생략할 수 있지만, 일관성을 위해 항상 f를 붙이는 것이 좋습니다.변수를 사용하면 다음과 같은 장점이 있습니다:
하드코딩된 값은 코드의 수정과 유지보수를 어렵게 만듭니다. 반면 변수를 사용하면 값의 변경이 필요할 때 변수만 수정하면 되므로 코드 관리가 수월해집니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Driver : MonoBehaviour
{
float steerSpeed = 1f;
float moveSpeed = 0.01f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Rotate(0, 0, steerSpeed);
transform.Translate(0, moveSpeed, 0);
}
}
매번 코드를 수정하여 값을 변경하는 것은 비효율적입니다. 다음 단계에서는 변수에 public 접근 제한자를 사용하거나 [SerializeField] 속성을 추가하여 Unity 에디터의 인스펙터에서 직접 변수를 조절하는 방법을 알아보겠습니다.
예를 들어, 변수를 다음과 같이 수정합니다:
public float steerSpeed = 0.1f;
또는
[SerializeField]
float steerSpeed = 0.1f;
이렇게 하면 Unity 에디터에서 스크립트가 추가된 오브젝트를 선택했을 때 인스펙터에서 steerSpeed의 값을 직접 수정할 수 있습니다.
int, float, double, bool, string.자료형 변수이름 = 값;public 또는 [SerializeField]를 사용하여 인스펙터에서 값을 변경할 수 있습니다.변수를 적절히 활용하면 게임 개발에서 복잡한 동작을 쉽게 구현하고 관리할 수 있습니다. 다음 시간에는 Unity 에디터를 활용하여 변수를 더욱 효과적으로 관리하는 방법에 대해 알아보겠습니다.
그럼 다음에 만나요!
Unity에서 변수를 직렬화하여 Inspector 창에서 조정하는 방법에 대해 자세히 알아보겠습니다. 이를 통해 게임 개발 과정에서 속도나 조향 속도 등을 실시간으로 변경할 수 있고, 특히 디자이너와 협업할 때 매우 유용합니다. 디자이너가 직접 코드를 수정하지 않고도 게임의 특정 요소를 조정할 수 있기 때문입니다.
우리가 만든 steerSpeed 변수를 Inspector에서 조정할 수 있도록 만들어 보겠습니다. 이렇게 하면 게임 플레이 중에 속도를 조정하여 게임의 동작 방식을 실시간으로 확인할 수 있습니다.
변수를 Inspector에 노출시키는 것은 개발 시간과 노력을 크게 절약해줍니다. 코드를 수정하고 다시 컴파일하는 과정을 거치지 않고도 값만 변경하여 게임의 동작을 바로 확인할 수 있기 때문입니다. 특히 팀 내에서 디자이너가 게임 밸런싱이나 조정 작업을 할 때 매우 효율적입니다.
이제 실제로 코드를 수정해보겠습니다.
Driver.cs 파일 열기: 우리가 수정할 스크립트 파일입니다.
moveSpeed 변수 찾기: 이 변수는 자동차의 이동 속도를 결정합니다.
[SerializeField] 어트리뷰트 추가하기:
[SerializeField]
float moveSpeed = 0.01f;
[SerializeField]는 Unity에서 제공하는 어트리뷰트로, private 변수도 Inspector에 노출시킬 수 있습니다.코드 저장하고 Unity로 돌아가기: 변경 사항을 저장한 후 Unity 에디터로 돌아가면 자동으로 컴파일이 진행됩니다.
자동차 오브젝트 선택하기: Hierarchy 창에서 자동차 오브젝트를 선택합니다.
Inspector 창 확인:
Driver 스크립트 컴포넌트에서 moveSpeed 변수가 보일 것입니다.0.01이 표시됩니다.속도 값 변경하기:
moveSpeed 값을 0.03으로 변경해보세요.실시간 조정:
moveSpeed 값을 조정할 수 있습니다.코드에서 설정한 초기값이 있더라도, Inspector에서 값을 변경하면 그 값이 우선됩니다. 즉, Inspector에서 설정한 값이 저장되고 적용됩니다. 따라서 가끔 코드를 보면 0.01로 설정되어 있는데 게임에서는 다른 속도로 움직이는 경우가 발생할 수 있습니다. 이는 Inspector에서 값이 변경되었기 때문입니다.
steerSpeed 변수도 직렬화하기이번에는 steerSpeed 변수를 Inspector에서 조정할 수 있도록 만들어보겠습니다.
Driver.cs 파일에서 steerSpeed 변수 찾기.
[SerializeField] 어트리뷰트 추가하기:
[SerializeField]
float steerSpeed = 0.1f;
코드 저장하고 Unity로 돌아가기.
Inspector에서 확인:
이제 steerSpeed 변수도 Inspector에 나타납니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Driver : MonoBehaviour
{
[SerializeField] float steerSpeed = 1f;
[SerializeField] float moveSpeed = 0.01f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Rotate(0, 0, steerSpeed);
transform.Translate(0, moveSpeed, 0);
}
}

moveSpeed 값을 낮추기:
moveSpeed 값을 0.01로 낮춥니다.게임 실행 및 조정:
steerSpeed 값을 조정하여 자동차의 회전 속도를 변경해보세요.실시간으로 방향 전환하기:
steerSpeed 값을 조정하면서 자동차의 방향을 바꿔보세요.Inspector에서 변수를 조정하여 자동차를 움직여보면서 변수의 중요성과 실시간 조정의 편리함을 느끼셨을 것입니다. 하지만 플레이어가 게임을 플레이할 때는 Inspector를 사용할 수 없으므로, 다음 단계는 키보드 입력을 통해 자동차를 조작할 수 있도록 만드는 것입니다.
이를 통해 플레이어는 키보드를 사용하여 자동차의 이동과 회전을 직접 컨트롤할 수 있게 될 것입니다.
[SerializeField] 어트리뷰트 사용: 변수를 Inspector에 노출시켜 실시간 조정 가능.이번 시간에는 Unity에서 변수를 직렬화하여 Inspector에서 조정하는 방법을 자세히 알아보았습니다. 이를 통해 개발 과정에서 더욱 효율적으로 작업할 수 있고, 팀원들과의 협업에서도 큰 도움이 됩니다. 다음 시간에는 키보드 입력을 통해 플레이어가 직접 게임을 조작할 수 있도록 하는 방법을 알아보겠습니다.