ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 간만에 유니티 이벤트 참가 겸 강의 따라하기
    잡담 2025. 1. 30. 20:53
    반응형

     

    완성본 링크

     

    https://www.youtube.com/watch?v=A58_FWqiekI&t=4317s

    영상 링크


     

     

    1. 세팅

     

    처음엔 니꼬쌤이 기본 세팅에 대해 설명해주십니다.

    간단한 부분이라 여기서 막히는 분은 잘 없겠지만

    제가 막혀본 경험이 있습니다..

    유니티 허브에서 엔진이 안받아 지는 경우가 가끔 있는데

    깔끔하게 포기하고 유니티 공식 사이트의 아카이브를 이용하거나,

    조금 번거로운 방법으로는 

    낮은 버전의 유니티 허브를 구하여 사용하면 문제없이 허브에서 직접 다운로드를 할 수 있게 됩니다.

     

    2. 강의에서 눈 여겨볼 기능, 기술들

     

    니꼬쌤이 적극적으로 사용하는 드래그&드랍을 통한

    스프라이트, 컴포넌트 할당, 애니메이션 생성은 엄청나게 편리한 기능이니까 기억해놓고 애용하도록 합시다.

    작업 피로도가 크게 줄어들어요

     

     

    Header와 Tooltip 코드도 쓸 때는 귀찮겠지만

    조금만 코드가 길어져도 저런 사소한 정리들이 엄청나게 도움이 됩니다.

    미리미리 정리하는 느낌으로 자주 써봅시다.

     

     

     

     

    니꼬쌤이rigidbody를 활용해 플레이어를 움직이게 하는 두 가지 방법을 보여줬는데

    두 가지(AddForce & linearVelocity)의 차이점을 설명해주지 않아 좀 아쉬웠습니다.

     

    간단하게 설명하자면

     

    linearVelocity 의 경우

    물리적인 반응을 무시한 즉각적인 움직임에 사용합니다.

    장점은 낮은 비용(성능에 영향이 적음) 이 있고

    단점은 물리를 무시하므로 충돌 및 마찰이 의도한대로 작동하지 않을 수 있습니다.

     

    AddForce 의 경우

    물리적인 반응을 무시하지 않고 자연스러운 움직임에 사용합니다.

    장점은 자연스러운 움직임 구현과 물리적인 반응에서 오류가 발생할 가능성이 적고

    단점은 높은 비용(성능에 영향이 큼) 이 있습니다.

     

    본인이 원하는 방향에 따라 사용 방향을 정하시면 좋겠습니다.

     

     

     

    강의에서 Mathf 클래스가 자주 사용되는데

    아주아주아주 중요한 클래스 입니다.

    컴퓨터가 알아서 삼각함수, 로그함수 등등 대부분의 수학 계산이 들어가 있는 클래스인데,

    이 클래스만 잘 알아두면 머리를 부여잡고 수학 공식을 찾아 변수를 일일히 잡아넣을 필요가 없어집니다.

    Mathf가 가진 기능들은 다양하므로 필요할 때 마다 찾아서 외우는 것도 좋고, 미리 알아보는것도 좋을 것 같습니다.

    수학을 잘 못해도 이 기능들만 잘 숙지하면 개발이 엄청 쉬워지지 않을까요?

     

        void Spawn()
        {
            GameObject randomObject = gameObjects[Random.Range(0, gameObjects.Length)];
            Instantiate(randomObject, transform.position, Quaternion.identity);
            Invoke("Spawn", Random.Range(minSpawnDelay, maxSpawnDelay));
        }
     

    니꼬쌤이 강의에 재귀함수도 넣어놓으셨네요

    재귀는 저도 도저히 친해질 수가 없습니다.

    영상에서 사용된 코드는 비동기적 재귀에 가까운 함수입니다.

    여러분도 재귀 함수에 대해 조금씩 알아보세요

    어느정도 크기가 있는 게임은 다 쓰더라구요

     

     

    3. 니꼬쌤이 까먹은 부분!

    영상에서 갑자기 SvaeHighScore 메서드를 사용한 부분이 없는데 참조가 생겼더라구요

    니꼬쌤이 깜빡하고 강의 영상에서 누락하신 것 같습니다.

        void Update()
        {
            if(State == GameState.Playing)
            {
                scoreText.text = "Score:" + Mathf.FloorToInt(CalculateScore());
            }
            else if(State == GameState.Dead)
            {
                scoreText.text = "High Score: " + GetHighScore();
            }
    
            if(State == GameState.Intro && Input.GetKeyDown(KeyCode.Space))
            {
                State = GameState.Playing;
                IntroUI.SetActive(false);
                EnemySpawner.SetActive(true);
                FoodSpawner.SetActive(true);
                GoldenSpawner.SetActive(true);
                playerStartTime = Time.time;
            }
    
            if(State == GameState.Playing && lives == 0)
            {
                playerScript.KillPlayer();
                EnemySpawner.SetActive(false);
                FoodSpawner.SetActive(false);
                GoldenSpawner.SetActive(false);
                SaveHighScore();
                DeadUI.SetActive(true);
                State = GameState.Dead;
            }
    
            if(State == GameState.Dead && Input.GetKeyDown(KeyCode.Space))
            {
                SceneManager.LoadScene("MainScene");
            }
        }
     
     

    해당 함수는 GameManager.cs 의 Update에서

    if(State == GameState.Playing && lives == 0) 조건 안에 추가하여 주시면 됩니다.

     

    3. 그 외 간만에 강의를 보며 했던 작은 메모들

    (기초적인 내용과 잡설이 많습니다.)

     

    1)Wrap Mode를 Clapmp 에서 Repeat로 변경

    변경 후 해당 스프라이트를 적용하면

    그 스프라이트의 Material이 생성되는데

    Material의 인스펙터에서 Tiling을 조정해주면 원하는대로 스프라이트의 반복 정도를 조정할 수 있다.

    바로 아래의 Offset을 조정하면 메테리얼의 위치만 수정할 수 있는데,

    말 그대로 껍데기만 움직이게 함으로써 가만히 있는 물체가 움직이는 것 같은 효과를 줄 수 있다.

     

    2)스프라이트 이미지의 투명한 부분을 유니티가 인식할 수 있도록 변경

    Material에서 Surface Type 을 TransParent 로 변경

     

    3)유니티 대부분의 기본 기능은 MonoBehaviour 가 관장하고 있으므로

    특별한 기능이 아니라면 기본적으로 MonoBehaviour를 상속받은 상태로 두면 된다.

     

    4)함수의 앞 부분은 메소드의 반환 타입을 뜻한다.

    void는 반환값이 없음을 뜻하고

    그 외 반환값이 있는 경우는

    int, string 그외 기타등등 이 있다.

    void의 경우 return 값이 필요없지만

    아래와 같이 반환값의 유형을 정해놓은 경우 함수에서 return값을 내어줘야 오류가 발생하지 않는다.

     

    5)Start와 Update 파트에서 생명 주기에 관한 설명을 추가했으면 좋았을 듯

     

    6)렌더링이란 말 그대로 화면에 '보여' 주는것을 뜻하는데

    이 부분은 Mesh Renderer가 담당한다.

    당연히 Material도 얘가 담당함

     

     

    7)스크립트에서 객체의 컴포넌트를 조정하고 싶을 때는

    기본적으로 해당하는 컴포넌트와 연결되어 있어야 한다.

    보통 Start에서 해당 작업을 하지만 이 강의에서는 인스펙터에 직접 할당하는 방식을 사용하였다.

    연결 후에는 매우 간단한데

    [연결한 컴포넌트의 변수.원하는 기능.원하는 기능의 상세 항목] 과 같이 . 을 통해 마치 우리가 컴퓨터에서 경로를 찾아 들어가듯 진행하면 된다.

    이후 = 을 이용해 원하는 대로 값을 바꿔주면 끝(그것이 bool값이던 int와 float 같은 수치이던, 벡터 값이던)

     

    8)2D 게임을 만드는데 왜 3D 오브젝트를 만들까?

    Quad는 한장의 종이와 같은 오브젝트이다.

    사실상 2D므로 3D 오브젝트지만 2D 게임에서 사용해도 되는 것(그냥 2D 오브젝트 써도 되지 않나?)

     

    또한 유니티의 기본 환경은 3D이므로

    2D오브젝트로 생성하는 모든 오브젝트가 이 Quad와 같은 성질을 띄고 있다고 봐도 무방하다.

    (3D오브젝트지만 2D처럼 보이는)

     

    반응형
Designed by Tistory.