天天看點

Unity 自定義文本,自動寫入Log日志

下面展示

自定義文本,自動寫入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 日志效果如下:

Unity 自定義文本,自動寫入Log日志