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 日志效果如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43505432/article/details/111320230
今日推荐