inblog logo
|
8strength
    프로그래밍

    유니티 기본 C# 문법 정리

    Damin Ryu's avatar
    Damin Ryu
    Mar 03, 2024
    유니티 기본 C# 문법 정리

    Debug.Log(“~~~”);

    디버그 멘트를 콘솔창에 띄워줌.

    void Start()
    {
    	Debug.Log("프로그램 시작");
    }

    Time.deltaTime

    프레임, 즉 컴퓨터의 사양에 관계 없이 오브젝트가 동일한 속도로 움직일 수 있도록 함. ‘이동이나 회전 등 움직임에 있어서 시간의 영향을 받는 기능을 만들 때에는 값에 deltaTime을 곱해서 흘러간 프레임 시간만큼만 가중치를 줌으로써 프로세서 속도의 영향에서 자유로워짐’

    참고할 글 : https://wergia.tistory.com/313

    HP = -1.0f * Time.deltaTime;
    h = h * speed * Time.deltaTime;

    Input.GetMouseButtonDown(숫자)

    숫자가 0일 때 : 왼쪽 마우스 버튼 클릭

    숫자가 1일 때 : 오른쪽 마우스 버튼 클릭

    숫자가 2일 때 : 마우스 휠 클릭

    if (Input.GetMouseButtonDown(0)) {}

    왼쪽 마우스 버튼이 클릭됐을 때

    참고할 글 : https://8strength.tistory.com/4

    https://8strength.tistory.com/5

    + Input.GetMouseButtonUp(숫자)는 이와 반대. 스와이프를 구현할 때 사용함

    참고할 글 : https://8strength.tistory.com/5

    Vector2

    2D 프로젝트에서 좌표를 표현하는 데이터. 말 그대로 벡터!

    참고할 글 : https://hotstudy.tistory.com/93

    ex) Vector2 startPos = Input.mousePosition;

    Input.mousePosition

    마우스 위치를 불러옴

    if (Input.GetMouseButtonDown(0))
    	{
        	Vector2 startPos = Input.mousePosition;
    	}
    else if (Input.GetMouseButtonUp(0))
    	{
        	Vector2 endPos = Input.mousePosition;
    	}
        
    float Length = endPos.x - startPos.x;

    transform.Translate(변수1, 변수2, 0);

    2D에서 움직임을 진행하는 기능

    참고할 글 : https://8strength.tistory.com/5

    transform.Translate(speed, 0, 0);

    transform.Rotate(0, 0, 변수);

    2D에서 회전을 진행하는 기능. 2D에서 회전은 z축, 3D라면 xyz에서 모두 회전 가능할 듯.

    참고할 글 : https://8strength.tistory.com/4

    transform.Rotate(0, 0, RotationSpeed);

    Input.GetAxis, Input.GetAxisRaw

    키보드 및 마우스의 (벡터 형태로 볼 수 있는 이동에 대한) input을 수직, 수평 벡터로 분해하여 각각의 벡터 크기값을 가져오는 기능... 이라고 이해된다(잘 모르겠음). 대충 방향키 키보드를 오래 누르고 있으면 그 이동 벡터의 크기가 커지고, 그만큼 더 많은 거리를 이동하게 되는 것 같음. 출력값은 float.

    Input.GetAxis("Horizontal")은 위로 이동할 때 +, 아래로 이동할 때 -의 값을 가지고, Input.GetAxis("Vertical")은 오른쪽으로 이동할 때 +, 왼쪽으로 이동할 때 -의 값을 가진다.

    이 값을 상수와 Time.deltaTime을 곱해 얼마나 (빠르게) 이동시킬 지 정할 수 있다. 실제 이동의 형태는

    transform.Translate(Vector2.right * 수평이동의값변수)

    transform.Translate(Vector2.up * 수직이동의값변수)

    로 표현된다.

    참고할 글 : https://keemeesuu.github.io/2021/unity/Input

    https://8strength.tistory.com/6

        void Update()
        {
            // 수평, 수직 입력(이동 기능 구현)
            // 수평(Horizontal), 수직(Vertical)
    
            // 키보드 입력
            float h = Input.GetAxis("Horizontal");
            float v = Input.GetAxis("Vertical");
    
            // 이동 속도 보정
            h = h * speed * Time.deltaTime;
            v = v * speed * Time.deltaTime;
    
            //Time.deltaTime : The time in seconds it took to complete the last frame
            //                 한 프레임이 완료되기까지 걸리는 시간. 주로 움직임에서 이 값을 곱하여 프레임 당 이동을 구현하는 용도로 활용
            //                 성능의 영향을 받음.
    
            // 실제 이동
            transform.Translate(Vector2.right * h);
            transform.Translate(Vector2.up * v);
        }

    회전

    https://8strength.tistory.com/4

    스와이프

    https://8strength.tistory.com/5

    Time.timeScale = 0;

    시간이 흘러가는 흐름을 설정하기 위한 변수

    1.0일 경우 실시간, 0.5일 경우 실시간보다 2배 느리게, 0일 경우 정지 상태 처리.

    게임 내 일시정지 또는 타워디펜스 게임 시간 조절 등을 설정하는데 사용

     

    enum

    https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/enum

        enum Rainbow
        {
            RED, ORANGE, YELLOW, GREEN
        }

    열거형 자료형.

     

    coroutine

    https://novlog.tistory.com/54

        Startcoroutine(함수명()); // 코루틴 실행
        Stopcoroutine(함수명()); // 코루틴 멈춤
    
        IEnumerator 함수명()
        {
            진행할 명령문;
            yield return waitForSeconds(1.0f);
        }

    가 기본 형식임.

    스킬 사용이나 물약 쿨타임 등을 설정할 때, Update 내에서 계속 데이터를 돌리는 것은 비효율적이기 때문에 사용한다.

    public bool isDelay;
    
    void Update()
    {
    	if(Input.GetKeyDown(KeyCode.Space))
        {
        	if(isDelay==false)
            {
            	isDelay = true;
                Debug.Log("물약 사용");
                StartCoroutine(Drink());
            }
            else
            	Debug.Log("쿨타임");
        }
    }
            	
                
    IEnumerator Drink()
    {
    	yield return new WaitForSeconds(5.0f);
        isDelay = false;
    }

     

    직렬화

    유니티에서 사용할 값을 필드 값으로 작성합니다.
    필드 값은 클래스 내부의 변수를 의미합니다.

     

    인스펙터에 공개

    다른 스크립트에서 접근 가능

    GameObject Square;

    X

    X

    public GameObject Square2;

    O

    O

    [SerializeField]GameObject Square2;

    O

    X

    [HideInInspector]public GameObject Square3;

    X

    O

    [HideInInspector] 을 사용하는 이유 : 해당 코드에서 딱히 이 값을 수정할 일이 없고, 다른쪽에서 작업이 주로 처리된다면 굳이 인스펙터창에서 보이지 않게 해서 다른 사용하는 값만 확인할 수 있게 해줌.

     

    #region ~~~

    #endregion

    코드 정리를 도와주는 도구

     

    벡터 사용법

    Vector2 v_ex; // 선언
    
    void Start()
    {
    	v_ex = new Vector2 (3, 5); // 값 대입
    }
    
    void Update()
    {
    	if (~~)
    		transform.position = v_ex; // 오브젝트 위치 초기화
    }

     

    다른 오브젝트의 함수 호출

    GameObject.Find("호출할 게임오브젝트".GetComponent<호출할 스크립트>().호출할 함수();

    이때 호출할 함수는 public이어야 함

     


    https://8strength.tistory.com/8

    https://8strength.tistory.com/10

    Share article

    8strength

    RSS·Powered by Inblog