2014-09-26 17:00:33 hxmxbox 阅读数 2157
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4647 人正在学习 去看看 张刚

Visual Studio可算是世上最强大的IDE了,最近需要用Unity3D开发2D的游戏,算是做个老虎机(Slot Machine)的小demo来调研Unity3D对于我们项目组的适用性。

既然VS这么牛B,以前也开发过一段时间的WPF程序,对VS也是大爱,今天说下如何利用VS2012来debug unity3d的C#脚本。

1. 打开VS2012, 打开Tools->Extensions and Updates,搜索并下载UnityVS,安装时需关闭VS2012。

unityVS_in_VS2012

2. UnityVS安装完毕后, 去安装目录(举例:C:\Program Files (x86)\Microsoft Visual Studio Tools for Unity\2012)下找到Visual Studio 2012 Tools.unitypackage, 复制该文件到Unity安装目录下Standard Packages文件夹下(举例:D:\Unity\Editor\Standard Packages)。

3.打开/重新打开Unity3D程序,右击Asserts->Import Package就会看到Visual Studio 2012 Tools, 点击导入到Asserts中。

vs2012Tools_in_unity3d

4. 在Unity3D中点击Edit->Preferences…->External Tools->External Script Editor,选择UnityVS.OpenFile。此时你双击你之前写的C#脚本就会自己打开VS2012了,并且导入整个工程目录。

unityVS_openFileunityVS_project

5. 返回VS2012,在你的脚本上加断点,并点击Attach to Unity

attach_to_unity

6. 返回Unity3D,运行你的游戏,这时候就进入VS2012的预设断点了。大功告成!!

debug_zambie_game_with_vs2012

转载请注明:ShirlmanBlog » 如何利用vs2012 debug unity3d

2014-08-14 17:24:11 morphyyang 阅读数 544
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4647 人正在学习 去看看 张刚

手游研发过程中,不停发版本到真机调试是非常痛苦的,在阅读Unity官方文档时候,发现Unity已经为这种情况开发了Unity Remote工具,该工具可以在如下地址下载:

http://docs.unity3d.com/Manual/UnityRemote4.html

 

一种特殊情况是,如果调试真机无法安装官方推荐的应用,其中特别是由于国内部分Android机器已经完全移除了Google Play基础框架,导致无法安装官方推荐apk的情况,Unity官方特别针对性在Asset Store提供了Remote工程UnityPackage,可以注册Unity账号,下载到本机上直接发布到真机。

 

后面的工作比较简单,根据Unity Remote提示,接上usb线,在Unity中选择Edit->Project Settings->Editor,选择对应真机操作系统就好了。

2018-03-27 23:36:47 qq_17758883 阅读数 666
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4647 人正在学习 去看看 张刚

我们使用unity开发与测试时,往往需要Debug来输出调试信息。而当发布正式包时,并不需要这些信息。


那要怎么去除它们呢?一条条语句删吗?这显然不科学,费时费力还可能会遗漏。身为万能的程序员,遇到这种问题我们当然要去造(zhao)轮子了。


如果你是Unity 5.3 以下的版本,那么你可以参照这篇文章:

http://www.xuanyusong.com/archives/2782

自己写一层Debuger类对原来的Debug类进行封装,以实现自己的需求。


如果你是Unity 5.3 以上的版本,那么Unity已经提供了一键屏蔽的功能:

Debug.logger.logEnabled = false;

这个语句可以同时屏蔽所有的Debug.log形式的输出,以及print形式的输出。因为print语句本身就是对Debug.log的一层包装:

public static void print(object message)
{
    Debug.Log(message);
}


2018-12-20 17:41:35 YongshuangZhao 阅读数 472
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4647 人正在学习 去看看 张刚

项目一旦发布以后,一定要把日志关闭掉,因为它会有一些额外的开销。如下代码可以在初始化的位置设置条件编译,在非编译模式下运行时,则关闭掉所有日志的输出:

#if !UNITY_EDITOR
        Debug.unityLogger.logEnabled = false;
#endif

在移动平台,保存和提取日志很不方便,所以可以监听错误以及异常,并且及时将其打印在屏幕上。

监听Application.logMessageReceived事件即可捕获错误日志,最终在OnGUI()方法中将它们打印在屏幕上。

using System;
using System.Collections.Generic;
using UnityEngine;

public class Debuger : MonoBehaviour
{
    //错误详情
    private List<String> m_logEntries = new List<String>();
    //是否显示错误窗口
    private bool m_IsVisible = false;
    //窗口显示区域
    private Rect m_WindowRect = new Rect(0, 0, Screen.width, Screen.height);
    //窗口滚动区域
    private Vector2 m_scrollPositionText = Vector2.zero;

    private void Start()
    {
        //监听错误
        Application.logMessageReceived += (condition, stackTrace, type) =>
        {
            if (type == LogType.Exception || type == LogType.Error)
            {
                if (!m_IsVisible)
                {
                    m_IsVisible = true;
                }
                m_logEntries.Add(string.Format("{0}\n{1}", condition, stackTrace));
            }
        };

        //创建异常以及错误
        for (int i = 0; i < 10; i++)
        {
            Debug.LogError("momo");
        }
        int[] a = null;
        a[1] = 100;
    }

    void OnGUI()
    {
        if (m_IsVisible)
        {
            m_WindowRect = GUILayout.Window(0, m_WindowRect, ConsoleWindow, "Console");
        }
    }

    //日志窗口
    void ConsoleWindow(int windowID)
    {
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Clear", GUILayout.MaxWidth(200)))
        {
            m_logEntries.Clear();
        }
        if (GUILayout.Button("Close", GUILayout.MaxWidth(200)))
        {
            m_IsVisible = false;
        }
        GUILayout.EndHorizontal();

        m_scrollPositionText = GUILayout.BeginScrollView(m_scrollPositionText);

        foreach (var entry in m_logEntries)
        {
            Color currentColor = GUI.contentColor;
            GUI.contentColor = Color.red;
            GUILayout.TextArea(entry);
            GUI.contentColor = currentColor;
        }
        GUILayout.EndScrollView();
    }
}

 

2015-05-27 22:00:17 attachyou 阅读数 536
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4647 人正在学习 去看看 张刚

Unity3D中的调试我一直很有话要说,调试真是个反人道的事情,所以简单介绍一下。。。

什么是日志

日志输出的函数大致可分为两类:Debug 和 print

Debug.Log()
Debug.LogWorning()
Debug.LogError()

MonoBehaviour.print(object);

Debug.LogXXX() 可以用于任何地方
print() 只能用于 MonoBehaviour 的子类之中
究其本源,这2种方法在本质都是 Debug.Log()

日志文件保存在什么位置

日志文件名

在我本机上,是这个文件【C:\Users\USER_NAME\AppData\Local\Unity\Editor\Editor.log】

Editor Logs:

Windows XP:

C:\Documents and Settings\YOUR_USERNAME\Local Settings\Application Data\Unity\Editor.

Windows Vista, 7:

C:\Users\YOUR_USERNAME\AppData\Local\Unity\Editor

OS X:

~/Library/Logs/Unity/

WebPlayer Logs:

Windows XP:

C:\Documents and Settings\YOUR_USERNAME\Local Settings\temp\UnityWebPlayer\log

Windows Vista, 7:

C:\Users\YOUR_USERNAME\Local Settings\temp\UnityWebPlayer\log

OS X:

~/Library/Logs/Unity/

对日志函数的封装

考虑到后续对日志部分的统一处理,一般会对日志函数封装一层,思想有些借鉴 Log4J 。

示例代码块

例如:

using Game.Const;
using UnityEngine;

namespace Game.Utility
{
    /// <summary>
    /// 日志工具,它是对LOG行为的一层简单封装。游戏代码中所有牵涉到LOG的都从这里进行。注意日志有级别的区分。
    /// </summary>
    public class LogUtility
    {
        // ---------------------------------- 单例 --------------------------------------

        /// <summary>
        /// singleton instance
        /// </summary>
        public static readonly LogUtility instance = new LogUtility();

        /// <summary>
        /// Prevents a default instance of the <see cref="LogUtility"/> class from being created.
        /// </summary>
        private LogUtility()
        {
        }

        // ---------------------------------- 单例结束 ----------------------------------


        /// <summary>
        /// 记录日志信息
        /// </summary>
        /// <param name="text">日志内容</param>
        /// <param name="level">日志级别</param>
        public void Log(string text, EnumLogLevel level)
        {
            if (level == EnumLogLevel.ERROR)
            {
                Debug.LogError(text);
            }
            else {
                NGUIDebug.Log(text);
            }
        }

        /// <summary>
        /// 记录 debug 级别的日志 
        /// </summary>
        public void LogDebug(string text)
        {
            Log(text, EnumLogLevel.DEBUG);
        }

        /// <summary>
        /// 记录 info 级别的日志 
        /// </summary>
        public void LogInfo(string text)
        {
            Log(text, EnumLogLevel.INFO);
        }

        /// <summary>
        /// 记录 info 级别的日志 
        /// </summary>
        public void LogError(string text)
        {
            Log(text, EnumLogLevel.ERROR);
        }

    }
}

另外

博文 来自: jueluoQAQ

Unity 3D 知识点

阅读数 764

没有更多推荐了,返回首页