TIL(Today I Learned)

카드 섞는 기능 구현하기 - TIL#4

Najdorf 2023. 12. 27. 20:58
728x90

어제 르탄이 찾기 카드게임에 추가했던 다시 시작 버튼 말고

오늘은 버튼을 누르면 남은 카드들끼리 섞이는 기능을 추가해보려고 한다.

 

카드 셔플 스프라이트

 

우선은 어제 다시 시작 버튼을 만들었던 것처럼

새로운 기능을 맡아줄 버튼의 스프라이트를 제작했다.

 

기존의 retryBtn 오브젝트를 Ctrl + D 해서 복제한 뒤,

이름만 바꾸고 새로 스크립트만 적용시키면 기본적인 세팅은 끝난다.

 

 

문제는 지금부터였다.

'지금 남아있는 카드끼리 섞는 기능' 이라는 것은

내 머리로 이해하기는 굉장히 쉬운 개념이지만

이를 로직을 생각해서 스크립트로 구현하기는

또 다른 문제였다.

 

    public void shuffleCard()
    {
        // 내가 원하는 기능:
        // 남은 카드의 인덱스를 가져온 뒤 다시 섞고,
        // 그 위치 그대로 섞인 인덱스를 적용하기

        // 남은 카드 수만큼 반복
        for (int i = 0; i < GameObject.Find("Cards").transform.childCount; i++)
        {
            Transform myChild = transform.GetChild(i);
            string myChildName = myChild.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
            Debug.Log(myChildName);
        }

    }

 

이게 오늘 하루 동안 했다는 것이 무색할 정도로

몇 시간 동안 계속 수정하고 구글링하고 수정하고 시도하고 수정하고... 를 반복한 뒤 나온

정말 별 거 없는 오류 투성이 코드다.

 

 

내가 원했던 것은 남은 카드 수를 가져와서,

그 수만큼 for문을 반복해,

모든 'Cards > Card(clone) > front' 오브젝트의 Sprite의 Image name을 가져와서

리스트를 만들고,

 

이것을 다시 Start() 함수에서 처음에 했던 것처럼,

정렬만 다시 한 뒤 순서대로 할당시키는 방식이었는데...

 

처음에 자식의 자식(?) 오브젝트에 접근하는 것부터

대단히 막혀버린 것이다.

 

 

분명 기능적으로는 전혀 어려울 것이 없는데...

내가 C#에 덜 익숙해서 생기는 문제는 아닌 것 같고,

Unity 오브젝트의 타입과 함수의 반환값들을

제대로 인지하지 못해서 생기는 결과라고 생각했다.

 

그래서 구글링을 한 결과...

자식 오브젝트에 접근하기 위해서는

  • transform.GetChild
  • transform.Find("이름")
  • GetComponentsInChildren<>()

등의 함수가 존재하는 것으로 확인이 되는데...

 

여기서 정말 모르겠는 건

함수의 사용 방법이 아니라

자식의 자식 오브젝트의 SpriteRenderer 컴포넌트의

Image name을 어떻게 접근해야 하는 것이다...

 

 

 

 

 

참고 블로그:

https://bloodstrawberry.tistory.com/867

 

유니티 - 자식 오브젝트 접근, 순회하기 (Iterating Child GameObjects)

Unity 전체 링크 자식 오브젝트를 순회하기 위해 빈 오브젝트들로 만들어서 아래와 같은 하이어라키를 만들어보자. 그리고 Parent에 SearchChild.cs 오브젝트를 추가하자. 첫 번째 순회 방법 - 자식의

bloodstrawberry.tistory.com

https://hoho325.tistory.com/79

 

[유니티(Unity)] 하위 오브젝트 접근하는 방법, 하위 오브젝트 개수 구하기(GetChild, FindChild, childCount

유니티를 다루면서 스크립트로 어떤 오브젝트의 하위 오브젝트를 접근해야 하는 경우가 있잖아요?? 그럴때 가능한 방법이 여러가지가 있습니다!! 이번에 모두 알아보죠 예제 준비하기 빈 GameObje

hoho325.tistory.com

 

728x90