다음과 같이 코드를 작성하여 abc 오브젝트에 aaa.jpg, bbb.jpg, ccc.jpg 3개의 이미지를 0.5초마다 바꿔서 보이게 할 수 있습니다.
using UnityEngine;
using System.Collections;
public class MyScript : MonoBehaviour {
public Sprite[] sprites; // 스프라이트 배열을 저장할 변수
private int currentSpriteIndex = 0; // 현재 스프라이트 인덱스
private float changeInterval = 0.5f; // 스프라이트 변경 간격
private float timer = 0f; // 경과 시간
void Start () {
// Resources 폴더에서 aaa.jpg, bbb.jpg, ccc.jpg 파일을 로드하여 스프라이트 배열에 저장합니다.
sprites = new Sprite[3];
sprites[0] = Resources.Load<Sprite>("aaa");
sprites[1] = Resources.Load<Sprite>("bbb");
sprites[2] = Resources.Load<Sprite>("ccc");
// SpriteRenderer 컴포넌트를 가져옵니다.
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
// 가져온 SpriteRenderer 컴포넌트에 초기 스프라이트를 할당합니다.
spriteRenderer.sprite = sprites[currentSpriteIndex];
}
void Update () {
// 경과 시간을 누적합니다.
timer += Time.deltaTime;
// 경과 시간이 변경 간격 이상이면 스프라이트를 변경합니다.
if (timer >= changeInterval) {
// 다음 스프라이트 인덱스를 계산합니다.
currentSpriteIndex++;
if (currentSpriteIndex >= sprites.Length) {
currentSpriteIndex = 0;
}
// SpriteRenderer 컴포넌트를 가져옵니다.
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
// 가져온 SpriteRenderer 컴포넌트에 스프라이트를 할당합니다.
spriteRenderer.sprite = sprites[currentSpriteIndex];
// 경과 시간과 스프라이트 인덱스를 초기화합니다.
timer = 0f;
}
}
}
위의 코드에서 Update 함수에서 경과 시간을 누적하고, 경과 시간이 변경 간격 이상이면 스프라이트를 변경하는 코드를 추가했습니다. 스프라이트 변경 시 currentSpriteIndex 값을 1 증가시켜 다음 스프라이트 인덱스를 계산하고, 이를 스프라이트 배열에서 가져와 SpriteRenderer 컴포넌트에 할당합니다. 마지막으로 경과 시간과 스프라이트 인덱스를 초기화합니다.
Time.deltaTime은 Unity에서 사용되는 변수 중 하나로, 이전 프레임과 현재 프레임 사이의 시간 간격을 나타냅니다. 이 값은 초 단위로 반환되며, 게임의 성능과 무관하게 일정한 간격으로 업데이트 됩니다.
예를 들어, 만약 게임이 60프레임으로 동작한다면, 한 프레임당 시간 간격은 1/60초 (약 0.0167초)입니다. 그렇다면, Update 함수가 호출되는 빈도는 초당 60회이며, 이전 프레임과 현재 프레임 사이의 시간 간격인 Time.deltaTime 값은 항상 1/60초가 됩니다.
따라서 Time.deltaTime 값을 사용하여 게임 오브젝트의 이동, 회전, 크기 조정 등의 작업을 수행할 때, 게임의 성능과 관계없이 일정한 속도로 작업을 수행할 수 있습니다. 예를 들어, 이전 프레임과 현재 프레임 사이의 시간 간격과 상관없이 1초에 10픽셀의 속도로 이동해야 한다면, Time.deltaTime 값을 사용하여 이동량을 계산할 수 있습니다.
if (timer >= changeInterval) {
// 다음 스프라이트 인덱스를 계산합니다.
currentSpriteIndex++;
if (currentSpriteIndex >= sprites.Length) {
currentSpriteIndex = 0;
}
위 코드는 타이머(timer) 변수가 changeInterval 이상이 되었을 때, 현재 스프라이트(currentSpriteIndex)의 인덱스를 증가시키고, 만약 마지막 스프라이트를 보여주었다면 다시 첫번째 스프라이트로 돌아가는 역할을 수행합니다.
즉, 만약 타이머가 changeInterval 이상이 된다면, 새로운 스프라이트를 보여주기 위해 현재 스프라이트의 인덱스를 1 증가시킵니다. 그리고 만약 새로운 인덱스가 스프라이트 배열의 길이(sprites.Length)보다 크거나 같다면, 스프라이트 배열의 첫 번째 스프라이트를 보여주기 위해 currentSpriteIndex를 0으로 재설정합니다.
예를 들어, 만약 sprites 배열의 길이가 3이고, changeInterval 값이 0.5초로 설정되었다면, 스크립트는 0.5초마다 현재 보이는 스프라이트를 다음 스프라이트로 변경합니다. 따라서, 0.5초마다 currentSpriteIndex 변수는 0 → 1 → 2 → 0 → 1 → 2 ...와 같이 변경됩니다.
이렇게 작성하면 abc 오브젝트에 aaa.jpg, bbb.jpg, ccc.jpg 3개의 이미지가 0.5초마다 순차적으로 보여집니다.
카테고리 없음
유니티2D에서 abc 라는 오브젝트에 aaa.jpg, bbb.jpg, ccc.jpg 3개의 이미지를 0.5초마다 바꿔서 보이게 만드는 방법
728x90
반응형
728x90
반응형