객체지향에서 다형성이란 동일한 기능을 클래스로 묶고 하위 클래스에서 상속받은 뒤 입맛에 따라 재정의하는 것이다.
더보기
public class MyCharacter
{
public string CharName = "";
public int Health = 100;
public int Strength = 100;
public float Speed = 10.0f;
public bool isAwake = true;
public virtual void SayGreeting()
{
Debug.Log("Hello, My Friend");
}
}
public class ManCharacter : MyCharacter
{
public override void SayGreeting()
{
Debug.Log("Hello, I'm a man");
}
}
public class WomanCharacter : MyCharacter
{
public override void SayGreeting()
{
Debug.Log("Hello, I'm a woman");
}
}
public class test : MonoBehaviour
{
public MyCharacter[] Characters = null;
private void Start()
{
Characters = new MyCharacter[3];
Characters[0] = new ManCharacter();
Characters[1] = new WomanCharacter();
Characters[2] = new MyCharacter();
EnterTavern();
}
public void EnterTavern()
{
foreach(MyCharacter C in Characters)
{
C.SayGreeting();
}
}
}
C#은 프로퍼티(속성)를 이용해 값이 변경되었을 때 특정 함수나 동작을 실행할 수 있도록 해준다.
후에 이벤트 기반 프로그래밍에도 사용된다.
더보기
public class test : MonoBehaviour
{
public int MyNumber
{
get
{
return iMyNumber;
}
set
{
if (value >= 1 && value <= 10);
{
iMyNumber = value;
NumberChanged();
}
}
}
private int iMyNumber = 0;
void Start()
{
MyNumber = 11;
MyNumber = 7;
}
void NumberChanged()
{
Debug.Log("Variable iMyNumber changed to : " + iMyNumber.ToString());
}
}
?연산자는 if-else문을 축약해주는 연산자다. (condition) ? (true) : (false); 로 구성된다.
public class test : MonoBehaviour
{
private bool ShouldHideObject;
private void Start()
{
ShouldHideObject = (transform.position.y > 100) ? true : false;
gameObject.SetActive(ShouldHideObject);
}
}
유니티에서는 SendMessage, BroadcastMessage로 문자열만을 이용해 함수를 찾아 실행시킬 수 있다.
단, 해당 기능은 C#의 리플렉션이라는 기능을 이용한다. 그래서 느리고 무겁다.
public class test : MonoBehaviour
{
private void Start()
{
SendMessage("MyFunction", SendMessageOptions.DontRequireReceiver);
}
void MyFunction()
{
Debug.Log("Hello");
}
}
position과 localPosition은 부모가 없는 경우 완전히 동일하지만
자식으로 들어가 있을 경우,
position은 어떤 경우에도 월드 좌표를 기준으로 한다.
localPosition은 인스펙터의 Transform 컴포넌트와 완전히 동일하다. 즉 부모의 위치가 자신의 {0, 0, 0} 위치가 되는것이다.