유니티 심화 주차 강의 든는중 (1-6 ~ 1-12)
이걸 41일차인 오늘 글을 쓴다고? 할 수 있지만... 개인과제는 혼자하니까 문제가 없었고 팀플때는 해결 했지만 글을 굳이 쓰지 않았었던 것 같다. 그리고 오늘 또 개인 공부하다가 그냥 갑자기 눈에 띄어서 해결법을 적어보려고 한다.
설정에서 .editorconfig 파일 생성이라는 버튼이 있는데 클릭하면 프로젝트 폴더에 파일이 생성된다. .editorconfig파일을 열고 [*] charset = utf-8를 추가해준다.이제 핑크핑크한 Material을 바꿔보자. 근데 왜 핑크핑크 해질까?
Standard Shader를 가리키고 있으면,Standard Shader가 포함되어 있지 않으므로 핑크로 표시된다.그래서 URP로 전환하는 법은!


그런데 반대로 지금이 Built-in환경인데 핑크로 보인다면 쉐이더를 Standard로 바꿔주자.
PlayerInput에서 Send Messages, Invoke Unity Events는 이미 다뤄보았다. 이번에는 Invoke C sharp Events를 사용해서 구현한다.

저렇게 설정을 바꾸고 InputActionAsset을 클릭해 Generate C# Class를 체크하고 Apply를 누른다. 그러면 C#스크립트가 하나 생성된다.
public class PlayerController : MonoBehaviour
{
public PlayerInputs playerInputs { get; private set; }
public PlayerInputs.PlayerActions playerActions { get; private set; }
void Start()
{
playerInputs = new PlayerInputs();
playerActions = playerInputs.Player;
}
private void OnEnable()
{
playerInputs.Enable();
}
private void OnDisable()
{
playerInputs.Disable();
}
}
추후에 더 자세한 설명으로 찾아오겠다!
[SerializeField] private string walkParameterName = "Walk";
// Hash 값으로 비교하기 위해 변환한 값을 저장할 변수들
public int WalkParameterHash { get; private set; }
public void Initialize()
{
//Hash
WalkParameterHash = Animator.StringToHash(walkParameterName);
//문자열
Animator animator = new Animator();
animator.SetBool("Walk", true);
}
문자열 비교와 정수 비교의 차이점은 뭘까?
animator.SetBool("Walk", true)같이 문자열을 직접 넣으면 내부적으로 매번 해시 테이블을 검색해 해당 파라미터를 찾게 된다. 런타임에 문자열을 비교/검색하므로 오버헤드가 있을 수 있다는 단점이 있다.
하지만 Animator.StringToHash(walkParameterName)로 미리 정수 해시를 계산해두면 애니메이터 내부에서는 정수 값을 인덱스로 바로 사용하기 때문에 문자열 검색 오버헤드가 사라진다. Update나 코루틴이 자주 호출되는 상황에서 효과적이다. 주의할 점으로는 해시 충돌 가능성은 낮지만, 애니메이터 파라미터 이름을 바꾸면 해시 값도 함께 갱신해야 한다.
애니메이터에서 마우스 오른쪽 클릭을 하고 Create Sub-State Machine을 선택하면 사용할 수 있다. 왜 이 기능을 사용할까?
오늘 강의를 많이 들으니까 정리할게 그만큼 많아져버렸다. 쓰는데만 한 시간인것 같은 느낌적인 느낌느낌. 그리고 내일은 현충일이라 쉬는날 일러스트코리아 보러가는데 신난다 귀여운애들 싹 쓸어와야징