Unity_개발일지_08

홍신영·2024년 10월 10일
0

Unity

목록 보기
10/62

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가 위에 해당하는 문자열 연산이다.

위처럼 적용하면 보다 최적화가 진행된 것으로 봐도 될 것같다.

profile
게임 클라이언트 개발자

0개의 댓글