프로그래밍 농장

유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 5주차 학습 일지 본문

STARTERS

유데미 스타터스 유니티 개발자 1기 취업 부트캠프 - 5주차 학습 일지

Tennessee201 2022. 7. 24.
728x90

5주차에는 유니티 엔진을 활용한 강의를 주로 진행하였다.

 

저번 2주간 C# 스크립팅, 알고리즘과 코드작성에 대한 전반을 공부할때에는, 해당부분에서 중요한 부분이 더 많다고 느꼈다. 하지만 유니티 엔진을 직접 활용하고 간단한 토이프로젝트에 적용해보니 엔진자체에 대한 기본적인 이해도가 기반되어야 다양한 기능들을 구현할수있겠다는 깨달음을 얻었다.

또한 기존 C# 코드작성때와 마찬가지로 단순기능구현을 목적으로 사용하는것이 아닌, 체계적이고 구조화된 규칙에 따라 유니티엔진을 사용하여야 추후 유지보수 및 변동사항을 적용할때 올바른 방식이라는것도 학습하였다.

 


- 유니티 엔진 학습 ( GameObject 생성 및 부가적인 효과 적용 )

 

기본적으로 유니티 엔진에 스크립트를 생성하고, 해당 스크립트를 특정 GameObject의 component로 넣어주어, 프로젝트 빌드 시, 다양한 방식으로 스크립트 내의 기능들을 구현할 수 있다. 

 

1. Instantiate() 를 이용하여 아래와 같이 GameObject를 각 5개 생성해주고, 각 게임오브젝트의 하이어라키를 아래와 같이 구성되도록 하시오. 

public class Assignment : MonoBehaviour
{
    [SerializeField]
    private GameObject goPrefab;
    public GameObject cam1;
    public GameObject cam2;

    GameObject go1;
    GameObject go1_1;
    GameObject go1_2;
    GameObject go1_1_1;
    GameObject go1_2_1;

    // Start is called before the first frame update
    void Start()
    {
        //
        // 2. 아래와 같이 하이어라키를 구성하게끔 코드를 작성해주세요
        // 1--- (1-1) 
        //    |   ㄴ (1-1-1)
        //    ㄴ (1-2)
        //        ㄴ (1-2-1)
        go1 = Instantiate(goPrefab);
        go1_1 = Instantiate(goPrefab, go1.transform);
        go1_2 = Instantiate(goPrefab, go1.transform);
        go1_1_1 = Instantiate(goPrefab, cam1.transform.position + new Vector3(0, 0, 5), Quaternion.Euler(Vector3.zero), go1_1.transform);
        go1_2_1 = Instantiate(goPrefab, cam2.transform.position + new Vector3(0, 0, 5), Quaternion.Euler(Vector3.zero), go1_2.transform);

        go1.name = "1";
        go1_1.name = "1-1";
        go1_2.name = "1-2";
        go1_1_1.name = "1-1-1";
        go1_2_1.name = "1-2-1";

위와 같이 GameObject 5개를 선언해준 후, Instantiate를 이용하여 각 인자에 해당 오브젝트의 생성위치 및 크기, 추후 적용시킬 cam에 대응되는 position값과 이름값을 선언해준다. 

 

2. 아래와 같이 camera Object를 두개 생성 후, 해당 오브젝트의 Component인 rect 값을 조절하여 화면을 좌,우로 분할하고 각 카메라에 생성한 1-1, 1-2 오브젝트를 하나씩 배치되도록 위 Instatiate의 인자로 position값을 할당하여준다. 

 //    
        
        GetParentChild(go1);

        //
        // -------------------
        //    |        |        |
        //    |        |        |
        //    |________|________|
        //    위와 같이 화면을 분할해주세요
        Debug.Log("4번 완료");
      
      
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            Destroy(go1_1_1, 3f);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            Destroy(go1_2_1, 3f);
        }
    }

    void GetParentChild(GameObject go)
    {
        for (int i = 1; i <= go.transform.childCount; i++)
        {
            Transform tr1 = go.transform.Find("1-" + i);
            Debug.Log(tr1.transform.name);

            for (int j = 0; j < tr1.transform.childCount; j++)
            {
                Debug.Log(tr1.transform.GetChild(j).name);
            }
        }
    }
}

 

 


+ 추가적인 학습내용

 

Occulusion -> 노란색 영역이 형성되는 기준이 존재함 .

'Unit'  -> 파란색박스가 Unit을 나누는 기준을 보여줌\

 

'Vector'  -> 클래스는 아니고 Structure 이다 .

: 일종의 방향과 크기를 갖는 자료형 (타입) 이다. 

 

위와 같이 실제로 Vector를 사용할때는 Nornalized를 사용하여 0~1까지 정규화를 수행해줌 

but, vec2의 값이 실제로 바뀌지는 않지만 nomalized된 값을 뽑아주긴한다. 

 

ex) 사전정의된 백터

  -> Vector.one -> ( 0, 0, 0)   Vector.left ( -1,0,0) Vector.up(0,1,0) ~~  등등이 있다. 

 Vector.forward(0,0,1) Vector(0,0,-1) ~~ 

 

가장 자주 사용하는 Vector 구현방식

Debug.Log(Vector3.Distance(vec,vec2));

위는 vec~ vec2까지의 거리를 표현할때 사용한다. 

 

AAB라는 알고리즘 ( Aligned Axesis Bounduring ) 을 사용하지만 -> 간단하게 Vector3를 사용하여 충돌처리를 구현

 

 

Vector.Lerp  -> ( Linear InterPolation ) : 선형 보간 : 

Vector.SmoothDemp -> 움직일때 사용 

sigmoid 함수   ->  '활성함수'  (ex. 1~0 까지의 값을 smooth하게 가져감) 

 


유데미코리아 바로가기 : https://bit.ly/3b8JGeD

 

Udemy Korea - 실용적인 온라인 강의, 글로벌 전문가에게 배워보세요. | Udemy Korea

유데미코리아 AI, 파이썬, 리엑트, 자바, 노션, 디자인, UI, UIX, 기획 등 전문가의 온라인 강의를 제공하고 있습니다.

www.udemykorea.com

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

 

#유데미, #유데미부트캠프, #취업부트캠프, #개발자부트캠프, #IT부트캠프, #부트캠프후기

728x90