๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Error

[Unity] ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋Šฆ์ถฐ์ฃผ๋Š” Invoke

728x90

[Unity] ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋Šฆ์ถฐ์ฃผ๋Š” Invoke

๋ฌธ์ œ

using System.IO;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class CameraCapture : MonoBehaviour
{
    [SerializeField]
    private Button TakePhotoButton;
    [SerializeField]
    private GameObject Canvas;
    public int fileCounter;
    public KeyCode screenshotKey;

    private Camera Camera
    {
        get
        {
            if (!_camera)
            {
                // _camera = Camera.main;
                _camera = Camera.main;
            }
            return _camera;
        }
    }

    [SerializeField]
    private Camera _camera;
    void Awake()
    {
        TakePhotoButton.onClick.AddListener(TakePhoto);
    }

    private void TakePhoto()
    {
        Debug.Log("TakePhoto()" + fileCounter);
        // Capture();
        Canvas.SetActive(false);
        Screenshot();
    }

    private void Screenshot()
    {
        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();

        byte[] bytes = texture.EncodeToPNG();
        string name = "AR Camera" + System.DateTime.Now.ToString("yyyy-mm-dd_HH-mm-ss") +fileCounter + ".png";
        NativeGallery.SaveImageToGallery(bytes, "AR Camera", name);
        fileCounter++;
        Destroy(texture);
        Canvas.SetActive(true);
        Debug.Log("Canvas True");
    }
}

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

image

Button๋“ค์˜ ์ƒ์œ„์— ํ•ด๋‹นํ•˜๋Š” Canvas๊ฐ€ SetActive(false) ๋˜์ง€ ๋ชปํ•˜๊ณ  ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์‹œ๊ฐ„์ง€์—ฐ ๊ธฐ๋Šฅ ํ•จ์ˆ˜ Invoke๋ฅผ ์ด์šฉํ•œ๋‹ค.

Invoke("method name", 2f)     // (ํ•จ์ˆ˜๋ช…, sec)
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class CameraCapture : MonoBehaviour
{
    [SerializeField]
    private Button TakePhotoButton;
    [SerializeField]
    private GameObject Canvas;
    public int fileCounter;
    public KeyCode screenshotKey;

    private Camera Camera
    {
        get
        {
            if (!_camera)
            {
                // _camera = Camera.main;
                _camera = Camera.main;
            }
            return _camera;
        }
    }

    [SerializeField]
    private Camera _camera;
    void Awake()
    {
        TakePhotoButton.onClick.AddListener(TakePhoto);
    }

    private void TakePhoto()
    {
        Debug.Log("TakePhoto()" + fileCounter);
        Canvas.SetActive(false);
        Invoke("Screenshot", 1f);
        // Screenshot();
    }

    private void setActiveTrue()
    {
        Canvas.SetActive(true);
    }

    private void Screenshot()
    {
        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();

        byte[] bytes = texture.EncodeToPNG();
        string name = "AR Camera" + System.DateTime.Now.ToString("yyyy-mm-dd_HH-mm-ss") +fileCounter + ".png";
        NativeGallery.SaveImageToGallery(bytes, "AR Camera", name);
        fileCounter++;
        Destroy(texture);
        // Canvas.SetActive(true);
        Invoke("setActiveTrue", 2f);
        Debug.Log("Canvas True");
    }
}

์ˆœ์„œ

  • Canvas.SetActive(false); Ui๋ฅผ ํ™”๋ฉด์—์„œ ์ง€์šด๋‹ค
  • Invoke("Screenshot", 1f); Screenshotํ•จ์ˆ˜๋ฅผ 1์ดˆ ํ›„ ํ˜ธ์ถœ
  • Invoke("setActiveTrue", 2f); setActiveTrueํ•จ์ˆ˜๋ฅผ 2์ดˆํ›„ ํ˜ธ์ถœ