下面展示
自定義文本,自動寫入Log日志
。
using BehaviorDesigner.Runtime.Tasks.Movement;
using MR_LBS.Common;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class AndroidLogHelper : MonoBehaviour
{
public static AndroidLogHelper instance = null;
string datapath_Enemy;
string datapath_Pet;
string datapath_Animator;
string datapath_Error;
string datapath_EnemyCard;
/// <summary>
/// 檔案夾
/// </summary>
private string folder_android;
private string file_Enemy = "Enemy.txt";
private string file_Pet = "Pet.txt";
private string file_Animator = "Animator.txt";
private string file_Error = "Erroe.txt";
private string file_EnemyCard = "EnemyCard.txt";
private void Awake()
{
instance = this;
}
private void Start()
{
folder_android = System.DateTime.Now.Day.ToString() + "日" + System.DateTime.Now.Hour.ToString() + "時" +
System.DateTime.Now.Minute.ToString() + "分";
if (Application.platform == RuntimePlatform.Android)
{
//判斷是否打開Log日志
if (!UnityPhotonClient.Instance.openLog)
return;
DirectoryInfo dir = new DirectoryInfo(Application.persistentDataPath + "/" + folder_android);
dir.Create();
//檔案夾内的檔案指定
datapath_Enemy = Application.persistentDataPath + "/" + folder_android + "/" + file_Enemy;
datapath_Pet = Application.persistentDataPath + "/" + folder_android + "/" + file_Pet;
datapath_Animator = Application.persistentDataPath + "/" + folder_android + "/" + file_Animator;
datapath_Error = Application.persistentDataPath + "/" + folder_android + "/" + file_Error;
datapath_EnemyCard = Application.persistentDataPath + "/" + folder_android + "/" + file_EnemyCard;
}
else if (Application.platform == RuntimePlatform.WindowsEditor)
{
//判斷是否打開Log日志
if (!UnityPhotonClient.Instance.openLog)
return;
DirectoryInfo dir = new DirectoryInfo("E:/" + folder_android);
if (dir.Exists)
{
dir.Delete(true);
}
dir.Create();
//檔案夾内的檔案指定
datapath_Enemy = "E:/" + folder_android + "/" + file_Enemy;
datapath_Pet = "E:/" + folder_android + "/" + file_Pet;
datapath_Animator = "E:/" + folder_android + "/" + file_Animator;
datapath_Error = "E:/" + folder_android + "/" + file_Error;
datapath_EnemyCard = "E:/" + folder_android + "/" + file_EnemyCard;
//Debug.LogError("LogHelper Start");
}
}
/// <summary>
/// Log 考慮DPS下釋放的卡牌
/// </summary>
public void OutPutEnemyCardLog(string outputType, string cardName)
{
//判斷是否打開Log日志
if (!UnityPhotonClient.Instance.openLog)
return;
FileInfo fileInfo = new FileInfo(datapath_EnemyCard);
if (!fileInfo.Exists)
{
writer = fileInfo.CreateText();
}
else
{
writer = fileInfo.AppendText();
}
//計算目前的時間
float time = /*180 -*/ BattleController.instance.battleTime;
var stringresult = string.Format("{0:D2}:{1:D2}", (int)time / 60, (int)time % 60);
//float y = 180 - x * 60;
//string timeString = x + "分" + y + "秒";
//writer.AutoFlush = true;
//以 行的方式寫入
writer.WriteLine(outputType + cardName + "__時間是" + stringresult);
// 釋放 流
writer.Close();
}
/// <summary>
/// 流 編輯器
/// </summary>
StreamWriter writer;
/// <summary>
/// 隻負責寫入,如果路徑檔案不存在則會建立一個新的檔案
/// </summary>
private void WriteLine(string datapath, string sentence)
{
//判斷是否打開Log日志
if (!UnityPhotonClient.Instance.openLog)
return;
FileInfo fileInfo = new FileInfo(datapath);
if (!fileInfo.Exists)
{
writer = fileInfo.CreateText();
}
else
{
writer = fileInfo.AppendText();
}
//計算目前的時間
float time = /*180 -*/ BattleController.instance.battleTime;
var stringresult = string.Format("{0:D2}:{1:D2}", (int)time / 60, (int)time % 60);
//float y = 180 - x * 60;
//string timeString = x + "分" + y + "秒";
//writer.AutoFlush = true;
//以 行的方式寫入
writer.WriteLine(sentence + "__時間是" + stringresult);
// 釋放 流
writer.Close();
在這裡清空流的緩存,但是不關閉流,因為一直會用到
//writer.Flush();
}
/// <summary>
/// 寵物控制器的 Log 方法
/// </summary>
/// <param name="controlBase">傳入的寵物控制器</param>
/// <param name="sentence">想要寫的 Log 句子</param>
public void MonsterLog(MonsterControlBase controlBase,string sentence)
{
if (controlBase.Monster_P.Body.layer == LayerMask.NameToLayer("Pet"))
{
WriteLine(datapath_Pet, sentence);
}
else if (controlBase.Monster_P.Body.layer == LayerMask.NameToLayer("Enemy"))
{
WriteLine(datapath_Enemy, sentence);
}
}
/// <summary>
/// 技能控制器的 Log 方法
/// </summary>
/// <param name="subControl">傳入的技能控制器</param>
/// <param name="sentence">想要寫的 Log 句子</param>
public void MonsterLog(SkillSubControl subControl,string sentence)
{
if (subControl.owner_Body.layer == LayerMask.NameToLayer("Pet"))
{
WriteLine(datapath_Pet, sentence);
}
else if (subControl.owner_Body.layer == LayerMask.NameToLayer("Enemy"))
{
WriteLine(datapath_Enemy, sentence);
}
}
/// <summary>
/// 動畫切換腳本的 Log 方法
/// </summary>
/// <param name="animator">傳入的動畫控制器</param>
/// <param name="sentence">想要 Log 的語句</param>
public void MonsterLog(Animator animator,string sentence)
{
WriteLine(datapath_Animator, sentence);
}
/// <summary>
/// 各種各樣的錯誤日志的的資訊,都寫在這個文本中
/// </summary>
/// <param name="sentence"></param>
public void ErrorLog(string sentence)
{
WriteLine(datapath_Error, sentence);
}
}
自動記錄log 日志效果如下: