유니티에서 기능을 만드는 이유
유니티에서 기능을 만드는 이유는 기획자가 원하는 기능을 컴포넌트(클래스)로 제공할려고임
이말은 즉 이스펙터의 값들은 우리가 조작할 수 있다는 말임!!
캡슐화 변수 선언하기
앞에서 말했듯이 기획자를 생각하면 기능을 만들어야하는데 그러기 위해서는 기획자가 접근을 할 수 있으면서 사용하기 편해야함
private float moveSpeed = 10f; -> 인스펙터에 뜨지 않음
public float moveSpeed = 10f; -> 나의 변수 값이 마음대로 바뀔 수 있음
Range
이걸 지정안하면 음수의 값이 들어가서 기획자가 캐릭터를 반대로 움직이게 할 수 있음
|
선언방식
|
인스펙터 노출
|
외부접근여부
|
보안성
|
|
public
|
보임
|
가능
|
낮음
|
|
private
|
안보임
|
불가
|
좋음
|
|
[SerializeField]private
|
보임
|
불가
|
좋음
|
using UnityEngine;
public class TransformExample : MonoBehaviour
{
private Transform tr = null;// 이거 안사용해도 됨 tr = transform; 이렇게만 적어도 됨
[SerializeField] [Range(1f, 100f)] private float moveSpeed = 10f;
}
이미 만들어진 오브젝트의 값 들고오기
목표는 우리는 오브젝트를 움직일꺼임
인스펙터에 있는 것들은 해당 오브젝트의 변수들임이므로 현재 오브젝트의 값을 불러와야함
단순 C#이었다면 아래의 코드로 짰겠지만 현재의 값을 들고오는 것이라는 뜻은 이미 동적할당이 되어있는 값이라는 뜻임
transform tr new Transform();
tr.position.x +1 ;
그러하여 위의 방법으로 불가함
GetComponent 제네릭 템플릿을 써서 들고오면됨
using UnityEngine;
public class TransformExample : MonoBehaviour
{
[SerializeField] [Range(1f, 100f)] private float moveSpeed = 10f;
private void Awake()
{
Debug.Log(gameObject.name); // Player가 나옴
tr = gameObject.GetComponent<Transform>(); // 만약 트랜스폼 없으면 null 값 반환 // 다른 오브젝트를 가져올때
tr = GetComponent<Transform>();//내것 가져올때 짧게써도 됨
tr = transform; // null값이 없기 때문에 변수 안만들고 사용해도 됨
}
}
Update에 함수를 넣어주면 동작을 할 수 있는데 함수는 객체지향에서 아래에 적어둠
private void Update()
{
MovingWASD();
}
움직임을 정의하는 MovingWASD();
다음 포스팅으로!!
'유니티' 카테고리의 다른 글
| [유니티] 콜리전, 콜라이더, 트리거, 리지드바디 (0) | 2025.04.07 |
|---|---|
| [유니티] Controller Example (0) | 2025.04.04 |
| [유니티] Transform 만들기-2 Vector Spaces (0) | 2025.04.03 |
| [유니티] 라이프사이클 (0) | 2025.04.03 |
| [유니티] 유니티란? 프로그램, 3D구성요소 (0) | 2025.04.02 |