본문 바로가기

카테고리 없음

C# 스크립팅 메모

오늘의 움짤

 

객체지향에서 다형성이란 동일한 기능을 클래스로 묶고 하위 클래스에서 상속받은 뒤 입맛에 따라 재정의하는 것이다.

더보기
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} 위치가 되는것이다.