2024. 8. 26. 22:05ㆍ카테고리 없음
개요
Unity 기본 개념 다시 정리
내용 - Hierarchy에 생성된 GameObject 위치 지정
생성된 GameObject에서 위치를 정해주는 방법
public class Board : MonoBehaviour
{
GameObject go = Instantiate(card, this.transform);
public GameObject card;
void Start()
{
GameObject go = Instantiate(card, this.transform);
}
}
코드 해석
GameObject go = Instantiate(card, this.transform); (클래스 필드):
- go라는 이름의 GameObject 변수를 선언하고, card를 인스턴스화한 결과를 이 변수에 할당합니다.
- Instantiate 함수는 card 오브젝트의 복사본을 생성합니다.
- 두 번째 인자인 this.transform은 생성된 오브젝트가 Board 클래스가 부착된 오브젝트의 자식 오브젝트로 생성된다는 의미입니다.
내용 - 배열 랜덤 섞기
랜덤한 숫자를 뽑고 그거를 배열로 정리하기.
using System.Linq;
public class Board : MonoBehaviour
{
public GameObject card;
void Start()
{
int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();
for(int i = 0; i < 16; i++)
{
GameObject go = Instantiate(card, this.transform);
float x = (i % 4) * 1.4f - 2.1f;
float y = (i / 4) * 1.4f - 3.0f;
go.transform.position = new Vector2(x, y);
go.GetComponent<Card>().Setting(arr[i]);
}
GameManager.Instance.cardCount = arr.Length;
}
}
코드 해석
int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }; : 초기 배열 생성합니다.
arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray(); :배열 arr의 요소들을 랜덤하게 섞습니다.
1. OrderBy : LINQ의 OrderBy 메서드는 컬렉션을 정렬할 때 사용됩니다. 여기서는 arr 배열의 각 요소 x에 대해 정렬 기준이 제공됩니다.
2. Random.Range(0f, 7f) : 0.0에서 7.0 사이의 부동 소수점(float) 값을 무작위로 반환합니다. OrderBy는 이 무작위 값을 기준으로 배열의 각 요소를 정렬합니다. 여기서 주목할 점은 Random.Range(0f, 7f)가 각 요소 x에 대해 호출되기 때문에, 배열의 각 요소는 서로 다른 무작위 값을 할당받아 정렬됩니다.
3. ToArray() : 정렬된 결과를 배열로 다시 변환하여 arr에 저장합니다. 이로써 원래의 배열이 무작위로 섞인 상태가 됩니다.
랜덤한 배열 생성의 작동 방식
OrderBy(x => Random.Range(0f, 7f))는 배열의 각 요소에 대해 무작위 값을 생성하고, 그 값을 기준으로 요소들을 정렬합니다. 각 요소의 무작위 값이 다르므로, 배열의 순서는 예측할 수 없게 됩니다. 예를 들어, 0이 배열의 첫 번째 위치에서 세 번째 위치로 이동할 수 있습니다.
내용 - 스트링 값을 조작하는 방법
문자열 안에 정수인 숫자값을 넣는 방법
public SpriteRenderer frontImage;
public void Setting(int number)
{
idx = number;
frontImage.sprite = Resources.Load<Sprite>($"rtan{idx}");
}
코드 해석
frontImage.sprite = Resources.Load($"rtan{idx}"); :
1. frontImage.sprite : frontImage의 sprite 속성에 이미지를 설정합니다.
2. Resources.Load<T> : Unity에서 Resources 폴더에 저장된 리소스를 런타임에 로드할 때 사용되는 메서드입니다. <Sprite> 제네릭 타입을 지정했기 때문에, 이 메서드는 특정 경로에서 Sprite 타입의 리소스를 로드합니다.
3. $"rtan{idx}" : 문자열 보간(string interpolation)을 사용하여 idx 값을 포함한 문자열을 생성합니다. 예를 들어, idx가 3이라면, "rtan{idx}"는 "rtan3"로 변환됩니다. 따라서, 이 줄은 Resources 폴더에서 rtan3라는 이름의 이미지를 Sprite 타입으로 로드하고, 이를 frontImage.sprite에 할당하는 역할을 합니다.
정리
Setting 메서드는 카드의 번호(idx)를 설정하고, 그 번호에 따라 Resources 폴더에서 해당하는 이미지를 찾아 카드의 앞면 이미지(frontImage.sprite)로 설정합니다.
Resources.Load<Sprite>("rtan{idx}")는 런타임에 "rtan{idx}" 이름을 가진 이미지를 로드하여, 카드의 이미지를 동적으로 변경할 수 있게 합니다.