HelloWorld-Unity 기본, life Cycle, 룰렛 프로젝트
2023. 7. 31.

https://docs.unity3d.com/kr/2021.3/Manual/UsingTheEditor.html

 

Unity 인터페이스 - Unity 매뉴얼

이 섹션에서는 가장 많이 사용되는 에디터 창과 각 창을 최대한 활용하는 방법에 대해 자세하게 설명합니다.

docs.unity3d.com

레이아웃 설정

 

 

Game- 디바이스의 스크린화면과 같다

씬 뷰- 가상 3d 공간: 작업하는 공간: 물체를 넣고 편집

 

Hierachy에 있으면 씬 뷰에 반드시 있다.

프로젝트 창에 있으면 파일이다.-유니티에서 관리하는 에셋 라이브러리

 

 

GameObject

-GameObject 클래스는 씬 내에 존재할 수 있는 모든 요소를 나타내는데 사용된다.

-클래스이므로 인스턴스로 존재해야한다.

-즉 씬의 모든 요소는 GameObject의 인스턴스이다.

-Play 버튼을 누르는 순간 Hierachy의 모든 요소는 '인스턴스화'된다: 이 때 메모리에 올라간다.

 

ex)Main Camera도 GameObject의 인스턴스이다.

 

-게임 오브젝트의 모양과 게임 오브젝트의 기능을 결정하는 기능적 컴포넌트의 컨테이너 역할을한다.

-모든 GameObject에는 Transform이 있다.(위치정보는 있어야 하기 때문)

-비활성화 상태는 인스턴스가 사라진 것이 아니다.(Hierachy에는 있다)

 

https://docs.unity3d.com/kr/2021.3/Manual/class-GameObject.html

 

중요 클래스 - GameObject - Unity 매뉴얼

Unity의 GameObject 클래스는 씬 내에 존재할 수 있는 모든 요소를 나타내는 데 사용됩니다.

docs.unity3d.com

 

 

스크립트

-사용자 정의 컴포넌트를 생성할 수 있다.(스크립트: 컴포넌트이다!)

 

위의 경우에 메인 카메라는 transform, camera, audio listener 3개의 컴포넌트를 가진다.

컴포넌트는 클래스이며, play(실행)시에 인스턴스화 된다.

*모든 클래스는 컴포넌트가 될수있다?=> (x)

-> MonoBehaviour를 상속받은 클래스만 컴포넌트가 될 수 있다: GameObject에 부착될 수 있다.

-MonoBehaviour를 상속받은 클래스 :  new 키워드 사용할 수 없다. -> 생성자 호출(x)

: MonoBehaviour를 상속받으면 play할때 인스턴스화 되므로 따로 new 키워드를 쓰면 안되는 것이다.

 

 

 

MonoBehaviour를 상속받지 않는 클래스 Hero는 컴포넌트가 되지 못함

https://docs.unity3d.com/kr/2021.3/Manual/CreatingAndUsingScripts.html

 

 

스크립트 생성 및 사용 - Unity 매뉴얼

게임 오브젝트의 동작은 연결된 컴포넌트 에 의해 조절됩니다. Unity 내장 컴포넌트는 다양한 목적으로 사용할 수 있지만 사용자 지정 게임플레이 기능을 구현하려면 충분하지 않은 경우가 많습

docs.unity3d.com

-컴포넌트를 부착한다 -> 인스턴스가 생겨난다.

 

 

LifeCycle

이벤트 함수의 실행순서- unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행된다.

 

Awake()

-인스턴스화 될 때 한번만 호출됨.

-생성자 같은 역할

 

https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html

 

Unity - Scripting API: MonoBehaviour.Awake()

Awake is called either when an active GameObject that contains the script is initialized when a Scene loads, or when a previously inactive GameObject is set to active, or after a GameObject created with Object.Instantiate is initialized. Use Awake to initi

docs.unity3d.com

GameObject는 Monobehaviour를 상속받는 클래스가 아니므로 생성자로 쓰일 수 있다.

인스펙터에 값을 할당: Assign: public으로 선언되어야한다.

[SerializeField]    //애트리뷰트를 사용하면 private 멤버도 인스펙터에 노출할 수 있다.
    private bool isTest;

리치텍스트

https://docs.unity3d.com/kr/560/Manual/StyledText.html

 

리치 텍스트 - Unity 매뉴얼

UI 요소와 텍스트 메시의 텍스트에는 여러 폰트 스타일 및 크기가 사용될 수 있습니다. 리치 텍스트는 UI 시스템과 레거시 GUI 시스템에서 모두 지원됩니다. Text, GUIStyle, GUIText, TextMesh 클래스에는 U

docs.unity3d.com

태그

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class App : MonoBehaviour
{
    
    public Hero hero;
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(hero);//Hero 클래스의 인스턴스
        hero.SayHello();

        //코드로 찾아서 집어넣기 = Assign(값할당)
        //활성화 되어 있는 게임 오브젝트를 찾을 수 있음
        GameObject go = GameObject.Find("Hero");
        Debug.Log(go);//Hero 게임 오브젝트의 인스턴스
        this.hero = go.GetComponent<Hero>();    //특정 게임 오브젝트의 T타입의 컴포넌트를 가져올 수 있다.


        //타입으로 찾을 수도 있다.
      //  this.hero = GameObject.FindAnyObjectByType<Hero>();

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

 

Order in Layer

-우선순위

https://docs.unity3d.com/kr/530/ScriptReference/Input.GetMouseButtonDown.html

 

Input-GetMouseButtonDown - Unity 스크립팅 API

Returns true during the frame the user pressed the given mouse button.

docs.unity3d.com

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RouletteController : MonoBehaviour
{
    public float rotAngle = 0;
    public float dampingCoefficient = 0.96f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
   
        //왼쪽 버튼을 눌렀다면
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("왼쪽버튼 클릭");
            rotAngle = 10;
           
        }
        this.transform.Rotate(0, 0, rotAngle);
        rotAngle *= dampingCoefficient;//감쇠계수를 곱해 angle을 줄여라
        Debug.Log(this.rotAngle);
    }
}

https://github.com/meltingmelvin/Roulette

 

myoskin