2013-01-21 14:53:57 jeksonal 阅读数 16773
  • Unity3D入门到精通-(2)Profiler工具精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的性能优化技术,根据Profiler工具监控的CPU,GPU,内存等数据(CPU执行时间,GPU执行时间,内存大小等),分析程序的性能瓶颈,从而提高程序性能。 适合对象:Unity初学开发者,Unity中级开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    2729 人正在学习 去看看 张刚

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


2017-04-12 10:43:00 qq_38190993 阅读数 1911
  • Unity3D入门到精通-(2)Profiler工具精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的性能优化技术,根据Profiler工具监控的CPU,GPU,内存等数据(CPU执行时间,GPU执行时间,内存大小等),分析程序的性能瓶颈,从而提高程序性能。 适合对象:Unity初学开发者,Unity中级开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    2729 人正在学习 去看看 张刚

    在使用Unity进行虚拟现实开发中,遇到了一个需求:如何做出一种测量工具,可以测量出虚拟空间中鼠标点下到鼠标拖动过程中两定点间的距离,并且实时显示数据。这个需求并不难,直接上代码:



    运行效果图如下:


    Pai大星微信——2463954659,再见!


2012-11-29 02:04:43 jiejieup 阅读数 2080
  • Unity3D入门到精通-(2)Profiler工具精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的性能优化技术,根据Profiler工具监控的CPU,GPU,内存等数据(CPU执行时间,GPU执行时间,内存大小等),分析程序的性能瓶颈,从而提高程序性能。 适合对象:Unity初学开发者,Unity中级开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    2729 人正在学习 去看看 张刚

Unity Tools Lesson 0--Overview

Author:J.J.Cat
Email:JJCat@Outlook.com

简介

使用Unity提供的Editor类库,可以让开发者创建自定义的Inspector面板和窗口。这里是Unity官方的Editor类库在线参考文档,您在接下来的学习和开发中将会一直使用它查找相关类参考文档。

Editor Classes

在Unity的官方Scripting Reference的目录下,他把所有的Scripting分为两类,一类叫做Runtime Classes,还有一类叫做Editor Classes。如果您只是用Unity进行游戏开发,那么您可能只接触过Runtime Classes,Runtime Classes是在游戏中运行的Scripting。而Editor Classes是在Unity下运行的Scripting。如果我们要制作工具,那么一定是在Unity下运行的,所以这些就是进行工具制作的类库。

Editor Classes指代Unity中的Editor类库,它包含了几十个关于Unity编辑器的类。这些类的功能很多,能帮助您在Unity下创建自己的工具。例如有关于Asset的类,他们能让您创建,修改,删除Asset,这样您可以自定义资源,并导入到Unity中进行编辑和修改。还有强大的动画工具类,可以创建和访问动画文件,如果你觉得Unity自带的Animation Editor还不能满足您的要求,你完全可以自己制作一个新的Animation Editor进行动画的创建和修改。

自定义Inspector面板和默认Inspector面板的对比

下图中,左边的Inspector是Unity默认给My Player类创建的,右边的Inspector面板是我们自定义的。显然右边的Inspector面板更加适合设计师用来进行数值的修改,它包含了最大和最小值的区间,并用一个Loading Bar来展现视觉要素。

默认的Inspector和自定义Inspector的对比

在Unity中创建自己的工具编辑器

下图中左侧的窗口是用户自定义窗口,他可以像其它的Unity窗口那样进行布局和摆放。


一个Unity Reference中的窗口例子

不是C#用户

本教程采用C#语言编写,如果您从来都没有在Unity中使用过C#,那么请先阅读官方文档Overview: Writing Scripts in C# & Boo(英文官方,中文翻译)。

对于Javascript和Boo用户,这篇是关于Javascript和C#语言不同之处的比较。这篇是关于C#和Boo语言不同之处的比较。这两篇文章可以很快速的让你了解C#的语法,让您能以最短的学习时间读懂接下去的C#代码。

调试

如果想要设置断点单步执行程序,那么必须使用Unity自带的IDE Mono Develop。想要调试Editor class的代码,首先得把Unity Debugger attach 上Unity Editor。步骤如下:启动Mono Develop,点击菜单栏Run->Attach to Process...,选中Unity Editor并点击Attach。完成这步后,就可以进行单步调试了。


Mono Develop Attach to Process...对话框

注意(如果出现Attaching失败,尝试查看Unity的菜单Edit->Preferences...点击External Tools选项卡,把Editor Attaching勾上,重启Unity和Mono Develop)

总结

Unity给开发者提供了一组Editor 类来制作自定义的编辑器窗口。在Asset Store上有很多插件,有些插件制作了非常漂亮的工具编辑器窗口。都是采用这些Editor来实现的。根据您的开发需要,您完全可以利用Editor类制作您自己的编辑器工具。

2013-01-15 12:09:04 jeksonal 阅读数 6285
  • Unity3D入门到精通-(2)Profiler工具精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的性能优化技术,根据Profiler工具监控的CPU,GPU,内存等数据(CPU执行时间,GPU执行时间,内存大小等),分析程序的性能瓶颈,从而提高程序性能。 适合对象:Unity初学开发者,Unity中级开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    2729 人正在学习 去看看 张刚

在Unity3D中,它的SpotLight, PointLight, DirectionalLight 三大灯光都能给物体打出阴影的效果:


要使打出来的灯光具有投影效果,必须有2个要求:

1: 对场景主摄像机的设置中      Rendering Path 需设置为:Deferred Lighting

2:开启灯光的投影效果    ;把灯光的 Shadow Type 设置为: Hard Shadows 或者Soft Shadows

这样就能很清楚的看到灯光的阴影效果了

2012-12-15 17:26:12 jiejieup 阅读数 5081
  • Unity3D入门到精通-(2)Profiler工具精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的性能优化技术,根据Profiler工具监控的CPU,GPU,内存等数据(CPU执行时间,GPU执行时间,内存大小等),分析程序的性能瓶颈,从而提高程序性能。 适合对象:Unity初学开发者,Unity中级开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    2729 人正在学习 去看看 张刚

Unity3D Tools Lesson 1--Inspector

Author:J.J.Cat
Email:JJCat@Outlook.com

简介

Inspector面板可以用来对Component和Asset进行快速编辑。如果您的Unity中没有看到Inspector面板,可以通过快捷键方式Ctrl+3打开。这节课我们将对一个类制作一个自定义的Inspector面板。

默认的Inspector样式

新建一个C#文件,命名为MyPlayer.cs,输入下面的代码。这些代码定义了一个MyPlayer class,它继承自MonoBehaviour,是一个用户自定义的component。

using UnityEngine;
[System.Serializable]
using System.Collections;
public class MyPlayer : MonoBehaviour 
{
    public int armor  = 75;
    public int damage = 75;
    public GameObject gun; 
}

注意:是不是只有派生自MonoBehaviour的类才能够进行自定义化Inspector? 不是,例如贴图,模型等不用附加到GameObject上的资源文件,可以在Project面板下显示并选中,在Inspecotor面板中会列出这些资源的属性,并且可以进行修改。如果您也要自定义asset,需要继承自ScriptableObject class。您可以在Project面板中选择一个FBX文件,或者一个Texture文件,查看Inspector的变化。自定义资源和Inspector会在以后的课程中进行讲解。

然后我们在场景中新建一个GameObject,重命名为MyPlayer,将上面的脚本添加到该GameObject上。 如果一个GameObject拥有该component,那么在Inspector面板中会显示相关的一些信息。默认情况下,Unity会自动为我们生成一个component编辑面板,他会把所有的public的变量显示在Inspector中。如下图:


默认的Inspector面板

自定义Inspector面板

Unity默认的Inspector面板可以随意对该变量进行修改。如果MyPlayer类中的这些变量对输入的数值有范围要求,例如只能输入0到100,这在默认的输入框下是无法做到的。但在自定义Inspector中,我们可以使用slider bar控件对输入范围进行限制。如果这个MyPlayer最后是要给关卡设计师使用,他就不可能输入一些无效的数值。下图为自定义后的Inspector,可以看到我们用slider bar代替了原来的输入框,并且设置slider bar的输入数值的范围为0到100,还加入了一个progress bar显示数值的范围。通过自定义Inspector就能制作适合各种类型的component的Inspector。


自定义的Inspector面板

现在我们开始自定义Inspector面板的内容,自定义后的Inspector如上图所示。 首先创建一个新的C#文件,命名为MyPlayerEditor.cs,并将该文件放在Editor文件夹下。 
创建MyPlayerEditor.cs

注意:为什么要放在Editor文件夹下?Unity规定所有的Editor classes都必须放在Editor文件夹下,这样Untiy运行Editor文件夹的Editor class,游戏中运行的代码不要放在Editor文件夹下。

下面的代码将会创建一个自定义的Inspector,你将会在Inspector面板中看到最后的效果。

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(MyPlayer))]
public class MyPlayerInspector : Editor
{
    public int damageProp;
    public int armorProp;
    public GameObject gunProp;

    // Initilization
    void OnEnable()
    {
        MyPlayer myPlayer = target as MyPlayer;
        damageProp = myPlayer.damage;
        armorProp = myPlayer.armor;
        gunProp = myPlayer.gun;
    }

    public override void OnInspectorGUI()
    {
        // show slider and progress bar
        damageProp =  EditorGUILayout.IntSlider("Damage", damageProp, 0, 100);
        ProgressBar(damageProp/ 100.0f, "Damage");

        // show slider and progress bar
        armorProp = EditorGUILayout.IntSlider("Armor", armorProp, 0, 100);
        ProgressBar(armorProp/ 100.0f, "Armor");
            
        gunProp = EditorGUILayout.ObjectField("Player's Gun", gunProp, typeof(GameObject), true) as GameObject;

    }

    // Custom GUILayout progress bar.
    private void ProgressBar(float value, string label)
    {
        Rect rect = GUILayoutUtility.GetRect(18, 18, "TextField");
        EditorGUI.ProgressBar(rect, value, label);
        EditorGUILayout.Space();
    }

}

然后打开Unity编辑器,选中GameObject,您就能看到自定义Inspector面板的内容了。下面对这MyPlayerEditor类进行详细讲解。

Editor class

Editor class是所有自定义Inspector的基类。我们必需从Editor class开始派生我们自己的Inspector。

[CustomEditor(typeof(MyPlayer))]
public class MyPlayerInspector : Editor
{
    // others...
}

下面这行代码指定了自定义Inspector的关联类的类型,我们这里要对MyPlayer类进行关联。这行代码的作用就是当您选中含有MyPlayer的GameObject时,就会显示MyPlayerInspector。

[CustomEditor[typeof(MyPlayer)]

初始化

Editor class继承自ScriptableObject,ScriptableObject有三个关于生命周期的消息响应函数:

  • OnEable
  • OnDisable
  • OnDestory

对于MyPlayerInspector来说,每当要显示自定义Inspector的时候就会调用OnEable,当切换到其他Inspector面板的时候就会调用OnDisable。所以OnEnable是进行初始化最好的地方。

在下述的初始化代码中,我们获取了当前选中的对象的成员变量。

void OnEnable()
{
    MyPlayer myPlayer = target as MyPlayer;
    damageProp = myPlayer.damage;
    armorProp  = myPlayer.armor;
    gunProp    = myPlayer.gun;
}

在上述的代码中,出现了一个新变量target,他代表了当前要进行Inspect的对象,在MyPlayerEditor类中,我们指定Inspect MyPlayer类,所以target就是当前My Player的一个引用。我们使用as操作符先对target进行类型转化。

Edtior类还有两个成员变量是用来表示当前选中的对象,他们分别叫做targets和serializedObject。

绘制GUI

如果您在游戏开发中使用过Unity自带的GUI类,那么您会发现EditorGUI类接口同GUI基本是同样的设计思路。所有的UI绘制必须放在OnInspectorGUI方法中,就好比在游戏中所与的GUI函数必须放在OnGUI方法中。

public override void OnInspectorGUI()
{
    // show slider and progress bar
    damageProp =  EditorGUILayout.IntSlider("Damage", damageProp, 0, 100);
    ProgressBar(damageProp/ 100.0f, "Damage");

    // show slider and progress bar
    armorProp = EditorGUILayout.IntSlider("Armor", armorProp, 0, 100);
    ProgressBar(armorProp/ 100.0f, "Armor");
        
    gunProp = EditorGUILayout.ObjectField("Player's Gun", gunProp, typeof(GameObject), true) as GameObject;

}

// Custom GUILayout progress bar.
private void ProgressBar(float value, string label)
{
    Rect rect = GUILayoutUtility.GetRect(18, 18, "TextField");
    EditorGUI.ProgressBar(rect, value, label);
    EditorGUILayout.Space();
}

EditorGUI类有一个方便布局的版本,叫做EditorGUILayout。使用EdiorGUILayout可以不用指定每个控件的坐标位置从而省去了每次进行计算坐标的苦差事。EditorGUILayout会更具调用顺序进行自动布局。在上述代码中我就使用了EditorGUILayout创建progress bar和slider bar。

总结

我们在这一课中详细介绍了创建一个自定义Inspector的详细步骤。我们制作了一个简单的Inspector面板,下一课我们会具体介绍更多的Editor class的功能。

Unity3D实用工具汇总

阅读数 1041

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