InputField
플레이어의 이름을 입력 받고, 저장하기 위해 InputField를 사용했다.
public InputField inputName;
public static string playerName { get; private set; }
public void SaveName()
{
playerName = inputName.text;
}
입력받은 데이터를 string으로 바꾸고 주었고, static으로 다른 클래스에서 참조하기 쉽게 구현하였다.
InputField 인스펙터 창을 보면 위와 같은 기능을 제어할 수 있다.
Character Limit은 문자열 최댓수로 5라고 되어있지만, 막상 입력해보니 6글자까지 가능했다.
Content Type으로 여러 타입이 있는데 정수만 받기, 문자열만 등 닉네임이니 name으로 선택했다.
플레이어 위에 이름표 달기
다음으로는 인게임 내에서 유저 머리위에 이름표를 붙혀보자.
Camera camera;
public GameObject target;
public float offsetZ = 10.0f;
private void Awake()
{
camera = GetComponent<Camera>();
camera = Camera.main;
}
private void FixedUpdate()
{
transform.position = target.transform.position - new Vector3(0,0,target.transform.position.z + offsetZ);
}
위는 카메라 스크립트이다. 왜 카메라를 가져왔는가 하면, 이름은 Canvas UI에 고정시켜놓고,
카메라로 플레이어를 따라 가게 하여 캐릭터 위에 계속 있도록 구현하였다.
이 스크립트를 카메라에 넣고, 카메라의 위치는 = x,y는 캐릭터의 위치를 그대로 사용하고 z값만 수정하였다.
z값 수정안하면 layer때문인지 까만화면만 나오게 된다.
StringToHash
이 함수는 문자열을 헤쉬값으로 바꾸는 함수이다.
문자열 비교 연산을 하여 맞다면 뭐를 호출 등을 할 때 문자열 연산은 효율적이지 않다고 한다.
그래서 문자열을 정수형인 int로 바꾸어 연산을 하면 보다 효율적으로 사용할 수 있다.
private static readonly int isWalk = Animator.StringToHash("isWalk");
private void Move()
{
animator.SetBool(isWalk, true);
}
//원래라면
// private void Move()
//{
// animator.SetBool("isWalk", true);
//}
애니메이션을 적용해줄 때, 흔히 쓰는 SetBool("walk",true);
여기서 walk가 위에 해당하는 문자열 연산이다.
위처럼 적용하면 보다 최적화가 진행된 것으로 봐도 될 것같다.