Unity의 다양한 Tips
입문
당연한 설정이라도 잊어버리기 일쑤여서 메모를 작성하기도 어렵다.
Unity 버전은 2017.4를 기반으로 작성되었습니다.
화면 크기를 변경하면 사용자 인터페이스가 손상됩니다.
Canvas Scaler가 고정 Pixel Size이기 때문입니다.
아래 그림과 같이 UI Scale Mode를 Scale With Screen Size로 설정하면 됩니다.
또한 참조 리소스는 주로 사용되는 해상도를 지정합니다.
※ 단, 길이와 너비가 변경된 경우에는 이곳의 설정만으로는 충분하지 않습니다.
스마트폰의 여러 버전 대응, 종횡 유지 대응 등 종횡 비례를 바꾸는 UI 디자인
Unity 공식 설명서다해상도 UI 설계를 참조하십시오.
스크립트에서 UI 생성 시 원점 오프셋
예:Image img = new GameObject("img").AddComponent<Image>();
img.rectTransform.position = Vector2.zero;
이 색상은 색상이 바래집니다.
anchoredPosition도 UI의 여러 해상도에 해당합니다.Image img = new GameObject("obj").AddComponent<Image>();
img.rectTransform.anchoredPosition = new Vector2(0,0);
검사 프로그램도 공공 변수를 변경할 수 있다
선언된 변수에 "System. NonSerialized"라고 쓰면 Inspector에 표시되지 않습니다.
편집기에서 변경하는 방법만 아니라면 다른 사람이 볼 때 밖에서 읽고 싶은 뜻을 알 수 있다.[System.NonSerialized]
Public int hoge = 0;
검사기 표시 전용 변수
표시하려는 변수에 "SerializeField"를 씁니다.
편집기에서 값을 바꾸려고 할 때 밖에서 Public를 읽고 싶은지 Inspector에서 지정하고 싶은지 모르기 때문에private 변수라도 괜찮다면 이 방법으로 쓰는 것이 좋습니다.[SerializeField]
private int hoge = 0;
프레임 속도가 떨어지면 캐릭터 속도가 느려져요.
Unity에서 스크립트를 만들면 기본적으로 Update () 를 생성하기 때문에 거기에 쓰기 쉽지만, Update는 프레임 속도에 의존하는 함수이기 때문에 이동 등 물리적 행위에 대해서는 FixedUpdate () 에 쓰거나 Update () 에 쓸 수 있습니다.델타 타임 걸면 돼.
참조 전용void Update()
{
gameObject.transform.position += Vector3.forward * Time.deltaTime;
}
혹은void FixedUpdate()
{
gameObject.transform.position += Vector3.forward;
}
다른 Script 참조에서
Unity나 C#뿐만 아니라 상황에 따라 그때그때 달라지니 따로 사용하세요.
당연히 사용하지만 왠지 알아봐도 잘 안 나오고 게임오브젝트.Find()가 눈에 띄기 때문에 여러 가지 방법을 먼저 넣으세요.
관리자로 Singleton 설정
여러 개의 Enemy, Item 등 같은 것을 생성할 때 사용할 수 없지만 이것은 Game Manager 등 하나만 생성하는 스크립트에서 자주 사용하는 방법이다.
hogeManager.cspublic int hoge = 100;
public static Instance;
void Awake()
{
if(Instance == null) Instance = this;
}
void OnDisable()
{
Instance = null;
}
호출 중void Start()
{
Debug.Log(hogeManager.Instance.hoge); //100
}
에서 설명한 대로 해당 매개변수의 값을 수정합니다.Singleton의 상세한 사용법과 조합법, Mono Behaviour와 더 나은 공존 방법 등을 조사하면 많습니다.
나는 그곳의 설명이 더욱 상세하고 이해하기 쉽다고 생각하니 각자 조사해 보세요.
FindWithTag() 등으로 유지
참조하려는 Script가 있는 Game Object에 Tag를 추가하여 Start 또는 Awake로 유지하는 방법입니다.
GameObject.Find()도 괜찮지만 무거운 처리이기 때문에 특별히 사용을 제한하지 않는다면 FindWithTag()를 사용하는 것은 나무랄 데가 없습니다.
HogeScript hoge;
void Start()
{
hoge = GameObject.FindWithTag("hoge").GetComponent<HogeScript>();
}
검사기로 직접 부착하다
SerializeField 등을 통해 Inspector에 표시되고 드래그를 통해 부착하는 방법입니다.
직관적이고 알기 쉬우며 힘들지 않은 방법이지만 프로젝트 파일을 이동할 때 부착이 자주 떨어진다.
접촉 객체로 보내기
위와 달리 극단적으로 한정되어 있지만 에너미를 만나면 피해를 입고, 아이템을 만나면 리스트를 넣는 등
이것은 접촉할 때 접촉한 것을 스크립트라고 부르고 싶을 때 사용하는 방법이다.
void OnTriggerEnter(collider col)
{
if(col.tag == "enemy")
{
col.GetComponent<enemy>().Damage();
}
}
후기
더 쓰고 싶은 게 있지만 생각이 안 나서 매번 업데이트하려고 해요.
그럼 좋은 유니티 생활 되세요!
참고 문헌
Unity - Manual
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Canvas Scaler가 고정 Pixel Size이기 때문입니다.
아래 그림과 같이 UI Scale Mode를 Scale With Screen Size로 설정하면 됩니다.
또한 참조 리소스는 주로 사용되는 해상도를 지정합니다.
※ 단, 길이와 너비가 변경된 경우에는 이곳의 설정만으로는 충분하지 않습니다.
스마트폰의 여러 버전 대응, 종횡 유지 대응 등 종횡 비례를 바꾸는 UI 디자인
Unity 공식 설명서다해상도 UI 설계를 참조하십시오.
스크립트에서 UI 생성 시 원점 오프셋
예:Image img = new GameObject("img").AddComponent<Image>();
img.rectTransform.position = Vector2.zero;
이 색상은 색상이 바래집니다.
anchoredPosition도 UI의 여러 해상도에 해당합니다.Image img = new GameObject("obj").AddComponent<Image>();
img.rectTransform.anchoredPosition = new Vector2(0,0);
검사 프로그램도 공공 변수를 변경할 수 있다
선언된 변수에 "System. NonSerialized"라고 쓰면 Inspector에 표시되지 않습니다.
편집기에서 변경하는 방법만 아니라면 다른 사람이 볼 때 밖에서 읽고 싶은 뜻을 알 수 있다.[System.NonSerialized]
Public int hoge = 0;
검사기 표시 전용 변수
표시하려는 변수에 "SerializeField"를 씁니다.
편집기에서 값을 바꾸려고 할 때 밖에서 Public를 읽고 싶은지 Inspector에서 지정하고 싶은지 모르기 때문에private 변수라도 괜찮다면 이 방법으로 쓰는 것이 좋습니다.[SerializeField]
private int hoge = 0;
프레임 속도가 떨어지면 캐릭터 속도가 느려져요.
Unity에서 스크립트를 만들면 기본적으로 Update () 를 생성하기 때문에 거기에 쓰기 쉽지만, Update는 프레임 속도에 의존하는 함수이기 때문에 이동 등 물리적 행위에 대해서는 FixedUpdate () 에 쓰거나 Update () 에 쓸 수 있습니다.델타 타임 걸면 돼.
참조 전용void Update()
{
gameObject.transform.position += Vector3.forward * Time.deltaTime;
}
혹은void FixedUpdate()
{
gameObject.transform.position += Vector3.forward;
}
다른 Script 참조에서
Unity나 C#뿐만 아니라 상황에 따라 그때그때 달라지니 따로 사용하세요.
당연히 사용하지만 왠지 알아봐도 잘 안 나오고 게임오브젝트.Find()가 눈에 띄기 때문에 여러 가지 방법을 먼저 넣으세요.
관리자로 Singleton 설정
여러 개의 Enemy, Item 등 같은 것을 생성할 때 사용할 수 없지만 이것은 Game Manager 등 하나만 생성하는 스크립트에서 자주 사용하는 방법이다.
hogeManager.cspublic int hoge = 100;
public static Instance;
void Awake()
{
if(Instance == null) Instance = this;
}
void OnDisable()
{
Instance = null;
}
호출 중void Start()
{
Debug.Log(hogeManager.Instance.hoge); //100
}
에서 설명한 대로 해당 매개변수의 값을 수정합니다.Singleton의 상세한 사용법과 조합법, Mono Behaviour와 더 나은 공존 방법 등을 조사하면 많습니다.
나는 그곳의 설명이 더욱 상세하고 이해하기 쉽다고 생각하니 각자 조사해 보세요.
FindWithTag() 등으로 유지
참조하려는 Script가 있는 Game Object에 Tag를 추가하여 Start 또는 Awake로 유지하는 방법입니다.
GameObject.Find()도 괜찮지만 무거운 처리이기 때문에 특별히 사용을 제한하지 않는다면 FindWithTag()를 사용하는 것은 나무랄 데가 없습니다.
HogeScript hoge;
void Start()
{
hoge = GameObject.FindWithTag("hoge").GetComponent<HogeScript>();
}
검사기로 직접 부착하다
SerializeField 등을 통해 Inspector에 표시되고 드래그를 통해 부착하는 방법입니다.
직관적이고 알기 쉬우며 힘들지 않은 방법이지만 프로젝트 파일을 이동할 때 부착이 자주 떨어진다.
접촉 객체로 보내기
위와 달리 극단적으로 한정되어 있지만 에너미를 만나면 피해를 입고, 아이템을 만나면 리스트를 넣는 등
이것은 접촉할 때 접촉한 것을 스크립트라고 부르고 싶을 때 사용하는 방법이다.
void OnTriggerEnter(collider col)
{
if(col.tag == "enemy")
{
col.GetComponent<enemy>().Damage();
}
}
후기
더 쓰고 싶은 게 있지만 생각이 안 나서 매번 업데이트하려고 해요.
그럼 좋은 유니티 생활 되세요!
참고 문헌
Unity - Manual
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Image img = new GameObject("img").AddComponent<Image>();
img.rectTransform.position = Vector2.zero;
Image img = new GameObject("obj").AddComponent<Image>();
img.rectTransform.anchoredPosition = new Vector2(0,0);
선언된 변수에 "System. NonSerialized"라고 쓰면 Inspector에 표시되지 않습니다.
편집기에서 변경하는 방법만 아니라면 다른 사람이 볼 때 밖에서 읽고 싶은 뜻을 알 수 있다.
[System.NonSerialized]
Public int hoge = 0;
검사기 표시 전용 변수
표시하려는 변수에 "SerializeField"를 씁니다.
편집기에서 값을 바꾸려고 할 때 밖에서 Public를 읽고 싶은지 Inspector에서 지정하고 싶은지 모르기 때문에private 변수라도 괜찮다면 이 방법으로 쓰는 것이 좋습니다.[SerializeField]
private int hoge = 0;
프레임 속도가 떨어지면 캐릭터 속도가 느려져요.
Unity에서 스크립트를 만들면 기본적으로 Update () 를 생성하기 때문에 거기에 쓰기 쉽지만, Update는 프레임 속도에 의존하는 함수이기 때문에 이동 등 물리적 행위에 대해서는 FixedUpdate () 에 쓰거나 Update () 에 쓸 수 있습니다.델타 타임 걸면 돼.
참조 전용void Update()
{
gameObject.transform.position += Vector3.forward * Time.deltaTime;
}
혹은void FixedUpdate()
{
gameObject.transform.position += Vector3.forward;
}
다른 Script 참조에서
Unity나 C#뿐만 아니라 상황에 따라 그때그때 달라지니 따로 사용하세요.
당연히 사용하지만 왠지 알아봐도 잘 안 나오고 게임오브젝트.Find()가 눈에 띄기 때문에 여러 가지 방법을 먼저 넣으세요.
관리자로 Singleton 설정
여러 개의 Enemy, Item 등 같은 것을 생성할 때 사용할 수 없지만 이것은 Game Manager 등 하나만 생성하는 스크립트에서 자주 사용하는 방법이다.
hogeManager.cspublic int hoge = 100;
public static Instance;
void Awake()
{
if(Instance == null) Instance = this;
}
void OnDisable()
{
Instance = null;
}
호출 중void Start()
{
Debug.Log(hogeManager.Instance.hoge); //100
}
에서 설명한 대로 해당 매개변수의 값을 수정합니다.Singleton의 상세한 사용법과 조합법, Mono Behaviour와 더 나은 공존 방법 등을 조사하면 많습니다.
나는 그곳의 설명이 더욱 상세하고 이해하기 쉽다고 생각하니 각자 조사해 보세요.
FindWithTag() 등으로 유지
참조하려는 Script가 있는 Game Object에 Tag를 추가하여 Start 또는 Awake로 유지하는 방법입니다.
GameObject.Find()도 괜찮지만 무거운 처리이기 때문에 특별히 사용을 제한하지 않는다면 FindWithTag()를 사용하는 것은 나무랄 데가 없습니다.
HogeScript hoge;
void Start()
{
hoge = GameObject.FindWithTag("hoge").GetComponent<HogeScript>();
}
검사기로 직접 부착하다
SerializeField 등을 통해 Inspector에 표시되고 드래그를 통해 부착하는 방법입니다.
직관적이고 알기 쉬우며 힘들지 않은 방법이지만 프로젝트 파일을 이동할 때 부착이 자주 떨어진다.
접촉 객체로 보내기
위와 달리 극단적으로 한정되어 있지만 에너미를 만나면 피해를 입고, 아이템을 만나면 리스트를 넣는 등
이것은 접촉할 때 접촉한 것을 스크립트라고 부르고 싶을 때 사용하는 방법이다.
void OnTriggerEnter(collider col)
{
if(col.tag == "enemy")
{
col.GetComponent<enemy>().Damage();
}
}
후기
더 쓰고 싶은 게 있지만 생각이 안 나서 매번 업데이트하려고 해요.
그럼 좋은 유니티 생활 되세요!
참고 문헌
Unity - Manual
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[SerializeField]
private int hoge = 0;
Unity에서 스크립트를 만들면 기본적으로 Update () 를 생성하기 때문에 거기에 쓰기 쉽지만, Update는 프레임 속도에 의존하는 함수이기 때문에 이동 등 물리적 행위에 대해서는 FixedUpdate () 에 쓰거나 Update () 에 쓸 수 있습니다.델타 타임 걸면 돼.
참조 전용
void Update()
{
gameObject.transform.position += Vector3.forward * Time.deltaTime;
}
혹은void FixedUpdate()
{
gameObject.transform.position += Vector3.forward;
}
다른 Script 참조에서
Unity나 C#뿐만 아니라 상황에 따라 그때그때 달라지니 따로 사용하세요.
당연히 사용하지만 왠지 알아봐도 잘 안 나오고 게임오브젝트.Find()가 눈에 띄기 때문에 여러 가지 방법을 먼저 넣으세요.
관리자로 Singleton 설정
여러 개의 Enemy, Item 등 같은 것을 생성할 때 사용할 수 없지만 이것은 Game Manager 등 하나만 생성하는 스크립트에서 자주 사용하는 방법이다.
hogeManager.cspublic int hoge = 100;
public static Instance;
void Awake()
{
if(Instance == null) Instance = this;
}
void OnDisable()
{
Instance = null;
}
호출 중void Start()
{
Debug.Log(hogeManager.Instance.hoge); //100
}
에서 설명한 대로 해당 매개변수의 값을 수정합니다.Singleton의 상세한 사용법과 조합법, Mono Behaviour와 더 나은 공존 방법 등을 조사하면 많습니다.
나는 그곳의 설명이 더욱 상세하고 이해하기 쉽다고 생각하니 각자 조사해 보세요.
FindWithTag() 등으로 유지
참조하려는 Script가 있는 Game Object에 Tag를 추가하여 Start 또는 Awake로 유지하는 방법입니다.
GameObject.Find()도 괜찮지만 무거운 처리이기 때문에 특별히 사용을 제한하지 않는다면 FindWithTag()를 사용하는 것은 나무랄 데가 없습니다.
HogeScript hoge;
void Start()
{
hoge = GameObject.FindWithTag("hoge").GetComponent<HogeScript>();
}
검사기로 직접 부착하다
SerializeField 등을 통해 Inspector에 표시되고 드래그를 통해 부착하는 방법입니다.
직관적이고 알기 쉬우며 힘들지 않은 방법이지만 프로젝트 파일을 이동할 때 부착이 자주 떨어진다.
접촉 객체로 보내기
위와 달리 극단적으로 한정되어 있지만 에너미를 만나면 피해를 입고, 아이템을 만나면 리스트를 넣는 등
이것은 접촉할 때 접촉한 것을 스크립트라고 부르고 싶을 때 사용하는 방법이다.
void OnTriggerEnter(collider col)
{
if(col.tag == "enemy")
{
col.GetComponent<enemy>().Damage();
}
}
후기
더 쓰고 싶은 게 있지만 생각이 안 나서 매번 업데이트하려고 해요.
그럼 좋은 유니티 생활 되세요!
참고 문헌
Unity - Manual
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public int hoge = 100;
public static Instance;
void Awake()
{
if(Instance == null) Instance = this;
}
void OnDisable()
{
Instance = null;
}
void Start()
{
Debug.Log(hogeManager.Instance.hoge); //100
}
HogeScript hoge;
void Start()
{
hoge = GameObject.FindWithTag("hoge").GetComponent<HogeScript>();
}
void OnTriggerEnter(collider col)
{
if(col.tag == "enemy")
{
col.GetComponent<enemy>().Damage();
}
}
더 쓰고 싶은 게 있지만 생각이 안 나서 매번 업데이트하려고 해요.
그럼 좋은 유니티 생활 되세요!
참고 문헌
Unity - Manual
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Unity의 다양한 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kanthan258/items/2b9c6b6214a29454cba9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)