Mathf.PingPong(int t, int length) 는 t값에 따라 0~length의 값을 반환한다. 예를들어

length = 3 일때의 그래프이다 t가 3일때 반환값도 3으로 꺾이기 전 그래프는 y=x 그래프를 따른다 기울기를 변형하고 싶다면 t의 값에 기울기변수 등을 곱하여 주면된다.
전처리기 문법
public void OnClickExit()//전처리기 문법을 통해 유니티 에디터가 정의 되어있을때만실행 빌드마다 다른 명령 가능
{
#if UNITY_EDITOR//유니티 에디터에서 실행중인지 확인
UnityEditor.EditorApplication.isPlaying = false;//에디터 모드에서 실행중지
#else//다른빌드에서 실행중일때
Application.Quit();//어플리케이션 종료
#endif//전처리기문 종료
}
유니티의 전처리기 문이다.
public void OnClickExit()
{
if (Application.isEditor) // Unity 에디터인지 확인
{
UnityEditor.EditorApplication.isPlaying = false;
}
else
{
Application.Quit();
}
}
유니티 에디터와 어플리케이션에선 종료 명령어가 다른데 유니티에디터에서 application.quit을 할경우 검은 화면만 나오고 종료되지않는다.
이런식으로도 작성이 가능하나 전처리기 문을 사용하면 컴파일 하기 이전에 처리하며 빌드된 프로그램에선 불필요한 코드 자체가 보이지 않게 된다.
현재 오브젝트의 자식 오브젝트중에서 find하기
startButton = transform.Find("StartButton").GetComponent<Button>();
find를 사용할경우 자식 오브젝트중 이름이 같은 것중 첫번째의 것을 가져온다.
GameObject go = transform.GetChild(childCount - i).gameObject;//getchild는 하위 오브젝트들을 인덱스로 찾아오는 메서드
getchild의 경우 인덱스 형태로 전부 가져올수있다.
AddListener
startButton.onClick.AddListener(() => OnClickStartButton(100));
startButton.onClick.AddListener(delegate { OnClickStartButton(50); });
AddListener를 활용하면 클릭시 실행될 메서드를 넣어줄수있다 단 이것은 매개변수가 없는void만 가능한데 이것을 람다식을 이용하거나 델리게이트를 활용하면 매개변수가 있는 메서드를 넣어줄수있다.
theStack = FindAnyObjectByType<TheStack>();
FindAnyObjectByType은 씬내의 오브젝트를 찾는것이다 이것은 오브젝트가 여러개일시 임의의 오브젝트를 찾아온다.
TheStack[] stacks = FindObjectsByType<TheStack>(FindObjectsSortMode.None);
여러개를 찾고싶다면 배열 형태로 또는 리스트로 관리할수있다.
상태를 이용
public enum UIState
{
Home,
Game,
Score
}
protected abstract UIState GetUIState();
public void SetActive(UIState state)
{
gameObject.SetActive(GetUIState() == state);
}
public void ChangeState(UIState state)
{
currentState = state;
homeUI?.SetActive(currentState);
gameUI?.SetActive(currentState);
scoreUI?.SetActive(currentState);
}
간단하게 상태를 변경하면 나머지 UI를 setactive(false) 해줄수있다.
changeState( 원하는 상태 )를 호출하면 각 ui클래서에서 자신의 state를 받아오고 이를 매개변수로 받은 원하는 상태와 비교한다. 값이 false 일경우 오브젝트를 off하고 true 일경우 on 한다.
mathf.Atan2 사용법
void Update()
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 direction = mousePos - transform.position; // 현재 위치에서 마우스 위치까지의 벡터 계산
float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; // 라디안을 도로 변환
transform.rotation = Quaternion.Euler(0, 0, rotZ);
}
Atan2(y,x)는 xy좌표를 통해 각도를 라디안값으로 반환한다 이것을 다시 Mathf.Rad2Deg 를통해 디그리로 변환해준다.
이것을 퀀더니언 오일러를 활용하여 같은 각도로 돌릴수 있다.
characterRenderer.flipX = isLeft;
flipX는 bool값이며 true 일때 좌우반전, false일때 그대로 출력함