Screenshot.cs
2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
public class Screenshot : MonoBehaviour
{
public GameObject blink; // 사진 찍을 때 깜빡일 것
//public GameObject shareButtons; // 공유 버튼
bool isCoroutinePlaying; // 코루틴 중복방지
// 파일 불러올 때 필요
string albumName = "ARHorrorGame"; // 생성될 앨범의 이름
[SerializeField]
GameObject panel; // 찍은 사진이 뜰 패널
// 캡쳐 버튼을 누르면 호출
public void Capture_Button()
{
// 중복방지 bool
if (!isCoroutinePlaying)
{
StartCoroutine("captureScreenshot");
}
}
IEnumerator captureScreenshot()
{
isCoroutinePlaying = true;
// UI 없앤다...
yield return new WaitForEndOfFrame();
// 스크린샷 + 갤러리갱신
ScreenshotAndGallery();
yield return new WaitForEndOfFrame();
// 블링크
BlinkUI();
// 셔터 사운드 넣기...
yield return new WaitForEndOfFrame();
// UI 다시 나온다...
yield return new WaitForSecondsRealtime(0.3f);
// 찍은 사진이 등장
GetPirctureAndShowIt();
isCoroutinePlaying = false;
}
// 흰색 블링크 생성
void BlinkUI()
{
GameObject b = Instantiate(blink);
b.transform.SetParent(transform);
b.transform.localPosition = new Vector3(0, 0, 0);
b.transform.localScale = new Vector3(1, 1, 1);
}
// 스크린샷 찍고 갤러리에 갱신
public void ScreenshotAndGallery()
{
// 스크린샷
Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
ss.Apply();
// 갤러리갱신
Debug.Log("" + NativeGallery.SaveImageToGallery(ss, albumName,
"Screenshot_" + System.DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss") + "{0}.png"));
// To avoid memory leaks.
// 복사 완료됐기 때문에 원본 메모리 삭제
Destroy(ss);
}
// 찍은 사진을 Panel에 보여준다.
void GetPirctureAndShowIt()
{
string pathToFile = GetPicture.GetLastPicturePath();
if (pathToFile == null)
{
return;
}
Texture2D texture = GetScreenshotImage(pathToFile);
Sprite sp = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
panel.SetActive(true);
//shareButtons.SetActive(true);
panel.GetComponent<Image>().sprite = sp;
}
// 찍은 사진을 불러온다.
Texture2D GetScreenshotImage(string filePath)
{
Texture2D texture = null;
byte[] fileBytes;
if (File.Exists(filePath))
{
fileBytes = File.ReadAllBytes(filePath);
texture = new Texture2D(2, 2, TextureFormat.RGB24, false);
texture.LoadImage(fileBytes);
}
return texture;
}
}