내 답:
네. 멈춥니다.
모범 답:
내 답:
아니오. 멈추지 않습니다.
모범 답:
IEnumerator Fade()
{
Color c = renderer.material.color;
for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)
{
c.a = alpha;
renderer.material.color = c;
yield return new WaitForSeconds(.1f);
}
}
내 답:
모범 답:
내 답:
유니티의 코루틴은 기본적으로는 하나의 스레드로 동작하는 동기라고 볼 수 있습니다.
모범 답:
내 답:
코루틴의 동작원리는 yield return을 통해 처리를 양보하는 것입니다. 저는 코루틴의 yield return WaitForSeconds를 통해 적이 죽은 후 몇 초 뒤에 이벤트가 발생하도록 설정했던 적이 있습니다.
내 답:
모범 답:
내 답:
모범 답:
💡 [스크린샷 기능 만들기]
스크린샷을 찍어 파일로 저장하는 코드를 다음과 같이 작성했습니다.
private void ScreenCapture()
{
// 스크린샷을 저장하기 위한 텍스쳐 생성
Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
// 스크린의 픽셀을 텍스쳐에 적용
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
texture.Apply();
// 텍스쳐를 PNG로 저장
byte[] bytes = texture.EncodeToPNG();
System.IO.File.WriteAllBytes(Application.dataPath + "/Screenshot.png", bytes);
Destroy(texture);
}
이를 평소와 같이 호출했는데,
private void Start()
{
ScreenCapture();
}
렌더링 처리가 완료되지 않은 시점에서 ReadPixels()를 호출하여 에러가 발생합니다.
따라서 내가 스크린샷을 요청한 타이밍(프레임) 중에서도,
렌더링이 완료된 시점에 ScreenCapture() 함수가 호출되어 에러 없이 스크린샷을 저장할 수 있도록 코드를 작성해주세요. (HINT : 코루틴 사용)
using UnityEngine;
using System.Collections;
public class CaptureScreenshot : MonoBehaviour
{
private void Start()
{
// TODO : 렌더링을 마친 뒤에 ScreenCapture를 호출해주는 코드 작성
}
// TODO : 필요하다면 추가적인 메서드 작성
//
private void ScreenCapture()
{
// 스크린샷 저장을 위한 텍스쳐 생성
Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
// 스크린 내용을 텍스쳐로 읽어들임
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
texture.Apply();
// 텍스쳐를 PNG로 저장
byte[] bytes = texture.EncodeToPNG();
System.IO.File.WriteAllBytes(Application.dataPath + "/Screenshot.png", bytes);
Destroy(texture);
}
}