Unity API 解析 (一)Application类静态属性及方法
发表于2018-04-28
Application类不含实例属性和实例方法,在脚本中通过直接调用Application类的静态属性和静态方法来控制程序的运行时数据,如场景的管理,数据的加载等。







Application类静态属性
1.dataPath属性:数据文件路径
基本语法
public static string dataPath{ get; }
功能说明
返回程序的数据文件所在文件夹的路径(只读).返回路径为相对路径,不同游戏平台的数据文件保存路径不同,具体如下所示: Unity 编辑器:<工程文件夹的路径>/Assets Mac播放器:<到播放器应用的路径>/Contents iPhone播放器:<到播放器应用的路径>/<AppName.app>/Data Win播放器:< 包含可执行播发器的文件夹的路径>\Data Dasboard窗口:< dashboard widget bundle的路径> 网络播放器:到播放器数据文件夹的绝对路径(没有实际的数据文件名称)
相似属性
persistentDataPath:返回一个持久化数据存储目录的路径(只读),可以在此路径下存储一些持久化的数据文件。对于同一平台,在不同程序中调用此属性时,其返回值是相同的,但在不同的运行平台下,其返回值是不一样的. streamingAassetsPath: 此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。 temporaryCachePath: 此属性用于返回一个临时数据的缓存目录(只读).对于同一平台,在不同程序中调用此属性时,其返回值是相同的,但在不同的运行平台下,其返回值是不一样的。
实例演示
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DataPath_ts : MonoBehaviour { void Start () { //dataPath和streamingAssetsPath的路径位置一般都是相对程序的安装目录位置 //persistentDataPath和temporaryCachePath的路径位置一般是相对所在系统的固定位置 Debug.Log ("dataPath:"+Application.dataPath); Debug.Log ("persistentDataPath:"+Application.persistentDataPath); Debug.Log ("streamingAssetsPath:"+Application.streamingAssetsPath); Debug.Log ("temporaryCachePath:"+Application.temporaryCachePath); } }
运行结果:

2.loadedLevel属性:关卡索引
基本语法
public static int loadedLevel{ get; }
功能说明
返回当前程序最后加载的关卡索引(只读),关卡也就是一个独立的场景。
实例演示
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LoadedLevel_ts : MonoBehaviour { void Start () { //返回当前场景的索引值 Debug.Log ("前场景的索引值 loadedLevel:"+Application.loadedLevel); //返回当前场景的名字 Debug.Log("当前场景的名字oadedLevelName:"+Application.loadedLevelName); /*是否有场景正在被加载,在使用静态方法LoadLevel或LoadLevelAdditive加载一个新场景时 常常需要一段时间才能加载完毕,当场景加载完毕时isLoadingLevel返回true,否则返回false */ Debug.Log ("是否正在加载场景isLoadingLevel:"+Application.isLoadingLevel); //返回游戏中可被加载的场景数量 Debug.Log ("可被加载的场景数量levelCount:"+Application.levelCount); //返回当前运行的平台 Debug.Log("当前运行的平台platform:"+Application.platform); //当前游戏是否正在运行 Debug.Log("游戏是否正在运行isPlaying:"+Application.isPlaying); //当前游戏是否处于Unity编辑模式 Debug.Log("是否处于Unity编辑模式isEditor:"+Application.isEditor); //游戏是否后台运行 Application.runInBackground=true; } }
运行结果:

Application类静态方法
1.CaptureScreenshot方法 : 截屏
基本语法
public static void CaptureScreenshot(string filename); public static void CaptureScreenshot(string filename, int superSize); 参数filename 截屏文件名称 superSize放大系数,默认为0,即不放大。
功能说明
此方法截取当前游戏画面并保存为PNG格式,文件默认保存在根目录下,若有重名文件则替换。 当superSize大于1时,截屏文件的宽度和高度同时被放大superSize倍。 当superSize小于0时,按默认值处理,即图片不放大也不缩小。 此方法在Web模式下无效。
实例演示
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CaptureScreenshot_ts : MonoBehaviour { int tp=-1; void Update () { if (tp == 0) { Application.CaptureScreenshot ("test01.png",0); } else if (tp == 1) { Application.CaptureScreenshot ("test02.png",1); } else { Application.CaptureScreenshot ("test03.png",2); } tp++; } }
运行结果:

2.LoadLevelAdditiveAsync方法 : 异步加载关卡
基本语法
public static AsynvOperation LoadLevelAdditiveAsync(int index);//index参数关卡索引值 public static AsynvOperation LoadLevelAdditiveAsync(string levelName);//levelName参数关卡名称
功能说明
此方法用于按照关卡名字在后台异步加载关卡到当前场景中,此方法只是将新关卡加载到当前场景,当前场景的原有内容不会被销毁.
实例演示
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LoadLevelAdditiveAsync_ts : MonoBehaviour { IEnumerator Start() { AsyncOperation async = Application.LoadLevelAdditiveAsync("GameScrene"); //异步加载中 Debug.Log("1.是否加载完成:"+async.isDone); Debug.Log("2.加载进度:"+async.progress); yield return async; //加载完成后 Debug.Log("3.是否加载完成:"+async.isDone); Debug.Log("4.加载进度:"+async.progress); } }
运行结果:
当前场景main

加载场景GameScrene

运行游戏后的场景

3.RegisterLogCallback方法 :注册委托
基本语法
public static void RegisterLogCallback(Application.LogCallback handler);参数是委托的名字
功能说明
此方法用于注册一个委托来调用日志信息 在开发的过程中,为了防止游戏运行产生异常信息,可以借助unity为我们提供的log回调方法,判断运行过程中是否产生意外状况,比如游戏运行过程中产生一些异常错误,我们可以通过该方法,对异常进行处理,或者产生一个弹框,告诉玩家游戏产生异常,需要重新登录或者其他的相关操作。
实例演示
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RegisterLogCallback_ts : MonoBehaviour { string output="";//日志输入信息 string stack="";//堆栈跟踪信息 string logType="";//日志类型 int tp=0; void Update () { Debug.Log ("output:"+output); Debug.Log ("stack:"+stack); Debug.Log ("logType:"+logType); Debug.Log ("tp:"+(tp++)); } void OnEnable() { //注册委托 Application.RegisterLogCallback (MyCallback); } void OnDisable() { //取消委托 Application.RegisterLogCallback (null); } //委托方法 void MyCallback(string logString ,string stackTrace,LogType type) { output = logString; stack = stackTrace; logType = type.ToString(); } }
运行结果:

来自:https://blog.csdn.net/u010812661/article/details/78832787