【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(4)
四、相册已满时的提示(1)制作提示窗口的UI在这个项目中,我们一共需要三个弹出窗口,所以这里先新建UI>Canvas,命名为Popup Window Canvas,将所有弹出窗口都放到这个画布下。在Popup Window Canvas下新建UI>Panel,重命名为Alert,按照之前介绍的方法设置大小、位置、背景图等。(参考大小:长600宽300)在Alert下新建UI>Te
·
四、相册已满时的提示
(1)制作提示窗口的UI
在这个项目中,我们一共需要三个弹出窗口,所以这里先新建UI>Canvas,命名为Popup Window Canvas,将所有弹出窗口都放到这个画布下。
在Popup Window Canvas下新建UI>Panel,重命名为Alert,按照之前介绍的方法设置大小、位置、背景图等。(参考大小:长600宽300)
在Alert下新建UI>Text,放到Alert偏上居中的位置,调整大小。(参考大小:长460宽180)在Text的Text组件中输入以下文字并调整字体、字号等:
相册已满!
请至少删除一张图片后再尝试截屏
在Alert下新建UI>Button,放到Alert偏下居中的位置,命名为Alert Btn,调整大小。在Alert Btn的子物体Text的Text组件中,输入文字“确定”,并调整字体、字号等。
完成后的提示窗口UI将类似于下图:

做完提示窗口UI后,取消勾选Alert,令其隐藏。
(2)当相册已满时,弹出提示窗口
这一步并不难,之前我们已经做完了截图功能,现在我们只需要加一个条件,也就是当已有截图数量小于相册格子数时才进行截图,否则就显示警告窗口。因为这里我们声明了一个公开的GameObject变量,所以记得写完脚本后要回到Inspector中,将Alert挂载到相应栏位。
public
GameObject
alertWindow
;
void
Start
(
)
{
//给警告窗口的关闭按钮加上监听事件
alertBtn
.
onClick
.
AddListener
(
CloseAlertWindow
)
;
}
void
Update
(
)
{
//按S键截图
if
(
Input
.
GetKeyDown
(
KeyCode
.
S
)
)
{
//如果已有截图数量小于相册格子数,则进行截图
if
(
fileCount
<
slots
.
Count
)
{
StartCoroutine
(
CaptureScreenshot
(
)
)
;
}
//如果已有截图数量大于相册格子数,则显示警告窗口
else
{
this
.
GetComponent
<
AlbumManager
>
(
)
.
alertWindow
.
SetActive
(
true
)
;
}
}
}
//关闭警告窗口
public
void
CloseAlertWindow
(
)
{
alertWindow
.
SetActive
(
false
)
;
}
到这步为止的脚本如下:
using
System
.
Collections
;
using
System
.
Collections
.
Generic
;
using
UnityEngine
;
using
System
;
using
System
;
using
UnityEngine
.
UI
;
using
System
.
IO
;
using
UnityEditor
;
using
System
.
Linq
;
public
class
AlbumManager
:
MonoBehaviour
{
private
string
folderPath
;
DirectoryInfo
screenshotDir
;
private
int
screenshotCount
=
0
;
static
List
<
int
>
screenshotlist
=
new
List
<
int
>
(
)
;
private
string
screenshotFileName
;
private
int
fileCount
=
0
;
Texture2D
[
]
textures
;
Sprite
[
]
sprites
;
String
[
]
screenshotNames
;
String
[
]
screenshotPaths
;
public
List
<
GameObject
>
slots
=
new
List
<
GameObject
>
(
)
;
public
GameObject
album
;
public
Button
albumCloseBtn
;
bool
isOpen
=
false
;
public
Button
albumCloseBtn
;
public
GameObject
alertWindow
;
void
Start
(
)
{
folderPath
=
Application
.
persistentDataPath
+
"/Textures/"
;
screenshotDir
=
new
DirectoryInfo
(
folderPath
)
;
if
(
!
Directory
.
Exists
(
folderPath
)
)
Directory
.
CreateDirectory
(
folderPath
)
;
albumCloseBtn
.
onClick
.
AddListener
(
ShowOrHideAlbum
)
;
screenshotlist
.
Add
(
screenshotCount
)
;
screenshotCount
=
PlayerPrefs
.
GetInt
(
"MaxNumber"
)
;
albumCloseBtn
.
onClick
.
AddListener
(
ShowOrHideAlbum
)
;
alertBtn
.
onClick
.
AddListener
(
CloseAlertWindow
)
;
ReplaceImages
(
)
;
}
void
Update
(
)
{
if
(
Input
.
GetKeyDown
(
KeyCode
.
A
)
)
{
ShowOrHideAlbum
(
)
;
}
if
(
Input
.
GetKeyDown
(
KeyCode
.
S
)
)
{
if
(
fileCount
<
slots
.
Count
)
{
StartCoroutine
(
CaptureScreenshot
(
)
)
;
}
else
{
this
.
GetComponent
<
AlbumManager
>
(
)
.
alertWindow
.
SetActive
(
true
)
;
}
}
}
private
IEnumerator
CaptureScreenshot
(
)
{
screenshotCount
++
;
screenshotlist
.
Add
(
screenshotCount
)
;
PlayerPrefs
.
SetInt
(
"MaxNumber"
,
screenshotlist
.
Max
(
)
)
;
screenshotFileName
=
"Screenshot_"
+
screenshotCount
+
".png"
;
ScreenCapture
.
CaptureScreenshot
(
folderPath
+
screenshotFileName
)
;
yield
return
new
WaitForSeconds
(
0.5f
)
;
#
if
UNITY_EDITOR
AssetDatabase
.
Refresh
(
)
;
#
endif
}
public
void
CreateSprites
(
)
{
FileInfo
[
]
screenshotFiles
=
screenshotDir
.
GetFiles
(
"*.png"
)
;
fileCount
=
screenshotDir
.
GetFiles
(
"*.png"
)
.
Length
;
Array
.
Resize
(
ref
textures
,
fileCount
)
;
Array
.
Resize
(
ref
sprites
,
fileCount
)
;
Array
.
Resize
(
ref
screenshotNames
,
fileCount
)
;
Array
.
Resize
(
ref
screenshotPaths
,
fileCount
)
;
for
(
int
i
=
0
;
i
<
fileCount
;
i
++
)
{
textures
[
i
]
=
new
Texture2D
(
256
,
256
)
;
screenshotPaths
[
i
]
=
screenshotFiles
[
i
]
.
FullName
;
screenshotNames
[
i
]
=
screenshotFiles
[
i
]
.
Name
;
byte
[
]
rawPNG
=
File
.
ReadAllBytes
(
screenshotPaths
[
i
]
)
;
textures
[
i
]
.
LoadImage
(
rawPNG
)
;
sprites
[
i
]
=
Sprite
.
Create
(
textures
[
i
]
,
new
Rect
(
0f
,
0f
,
textures
[
i
]
.
width
,
textures
[
i
]
.
height
)
,
Vector2
.
zero
,
100.0f
)
;
sprites
[
i
]
.
name
=
"Sprite"
+
i
;
}
}
public
void
ReplaceImages
(
)
{
CreateSprites
(
)
;
for
(
int
j
=
0
;
j
<
slots
.
Count
;
j
++
)
{
slots
[
j
]
.
transform
.
GetChild
(
0
)
.
gameObject
.
GetComponent
<
Image
>
(
)
.
sprite
=
null
;
slots
[
j
]
.
transform
.
GetChild
(
0
)
.
gameObject
.
SetActive
(
false
)
;
}
for
(
int
i
=
0
;
i
<
sprites
.
Length
;
i
++
)
{
if
(
slots
[
i
]
.
transform
.
GetChild
(
0
)
.
gameObject
.
activeInHierarchy
==
false
)
{
slots
[
i
]
.
transform
.
GetChild
(
0
)
.
gameObject
.
SetActive
(
true
)
;
slots
[
i
]
.
transform
.
GetChild
(
0
)
.
gameObject
.
GetComponent
<
Image
>
(
)
.
sprite
=
sprites
[
i
]
;
}
}
}
public
void
ShowOrHideAlbum
(
)
{
isOpen
=
!
isOpen
;
album
.
SetActive
(
isOpen
)
;
}
public
void
CloseAlertWindow
(
)
{
alertWindow
.
SetActive
(
false
)
;
}
更多推荐
所有评论(0)