https://www.youtube.com/watch?v=Ic5ux-tpkCE
1. Serializing Components
직렬화(Serialized Field)가 붙은 변수에 컴포넌트가 붙어있는 Prefabs 을 생성해줄 경우 굳이 GameObject 를 만든후 컴포넌트를 붙이지 않아도 된다.
2. Drowing Scene Gizmos
Gizmos Tracking 이 중요하다. 그려놓고 보면 바로 보임
3. Initialization Order
초기화 순서 중요. static pattern 에서 Awake 에서 초기화를 하면 겹침.
[DefaultExecutionOrder(-1)]
public class SensorManager : MonoBehaviour
{
...
}
최근에 알게된 DefaultExecutionOrder
4. Stop using public field
굳이 쓰려면 getter setter 같은 property 를 쓰자.
5. Modulo(%) to loop collections
산술연산자 % 를 잘 활용하자.
public class Cow : MonoBehaviour
{
[SerializeField] private AudioSource _source;
[SerializeField] private AudioClip[] _clips;
private int _clipIndex;
private void OnMouseDown()
{
_source.clip = _clips[_clipIndex++];
_source.Play();
if (_clipIndex >= _clips.Length) _clipIndex = 0;
}
}
To Fixed
public class Cow : MonoBehaviour
{
[SerializeField] private AudioSource _source;
[SerializeField] private AudioClip[] _clips;
private int _clipIndex;
private void OnMouseDown()
{
// Option 1
_source.clip = _clips[_clipIndex++ % _clips.Length];
_source.Play();
// Option 2 - PlayClipAtPoint(AudioClip clip, Vector3 position, float volume = 1.0F)
AudioSource.PlayClipAtPoint(_source.clip, transform.position, 1f);
}
}
6. PlayClipAtPoint 한줄로
7. Limit extern calls with SetPositionAndRotation
transform.position , transform.rotation 을 초기화할 때 SetPositionAndRotation 같은 API 로 한줄로
8. Operator overloading
public struct Stats
{
public int AttackPower;
public int Health;
public static Stats operator +(Stats a, Stats b)
{
return new Stats
{
AttackPower = a.AttackPower + b.AttackPower,
Health = a.Health + b.Health
};
}
}
public class Something
{
public Something()
{
var baseStats = new Stats
{
AttackPower = 69,
Health = 420
};
var leveledStats = new Stats
{
AttackPower = 123,
Health = 456
};
// from
var finalStats = new Stats
{
AttackPower = baseStats.AttackPower + leveledStats.Health,
Health = baseStats.AttackPower + leveledStats.Health
};
// to
var finalStats = baseStats + leveledStats;
}
}
9. Composition
구성방식 - 필요에 따라서 독립성과 종속성을 지켜가면서 구성하기
10. Don't use lazy naming conventions
변수이름 편하게 적지말고, 정확하게 적기
'Unity' 카테고리의 다른 글
[Unity Error] Unity ARMv7 ARM64 빌드시 크래시 에러 (0) | 2022.12.05 |
---|---|
[Unity] abstract, virtual, interface 정의 (0) | 2022.11.16 |
유니티 그래픽스 최적화 - GI (Global Illumination) 정리 (0) | 2022.11.11 |
iOS용 AppStore 배포 등록절차 (0) | 2022.11.02 |
[Unity] 게임오브젝트 투명하게 만들기 (0) | 2022.05.25 |