2016-08-16 10:33:16 mengyidan 阅读数 52
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4646 人正在学习 去看看 张刚

Unity3D是目前最流行的游戏开发工具,是一个可以让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

为了让开发者能够系统全面的学习Unity3D知识,CSDN特定邀请了Unity3D方面的知名专家,资深程序员一起打造了Unity3D知识库,经过各位特邀编辑的层层筛选,目前已收录的核心知识点精华文章已达300多篇,包括视频课程、实战Demo、图书等优秀的学习资源。

我也想成为特邀编辑,参与CSDN知识库,筛选优质内容,如何加入?

Unity3D知识图谱

Unity3D优秀资源一瞥

零基础一步一步教你制作跑酷类游戏(填坑完整版)

在两个月前曾写了一篇《【Unity3D实战】零基础一步一步教你制作跑酷类游戏(1)》,里面一步一步演示了制作跑酷类游戏,然而由于时间原因,只写到了让角色往前移动为止。这个坑一直没有时间去填,(虽然也没多少人看啦),今天刚好有时间完成了一个跑酷类游戏的Demo。放上来给有兴趣的朋友看看。

Unity3D客户端在游戏场景中创建阻挡并用二进制导出

整体思路是把地形用一米见方的格子分隔,然后在格子里放置cube代替阻挡,存盘时用一维数组,1表示阻挡,0表示没有阻挡。如果要实现更精确的阻挡也可以直接保存位置和旋转信息。

Unity3D 导出的apk进行混淆和加固(防止反编译)

对于辛辛苦苦完成的apk程序被人轻易的反编译了,那就得不偿失了,这篇文章就是解决Unity打包出来的apk进行代码加固和混淆。

Unity3d Human skin real time rendering 真实模拟人皮实时渲染

由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像存在裂痕,解决方式是加入曲面细分和置换贴图进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成功了但是着色效果变的很奇怪,这里就不用曲面细分了,大家如果有在fragment shader上用曲面细分的好办法,可以的话请告诉我参数设置。

Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果强化版

本文主要介绍Unity3D游戏开发复杂模型的选取与轮廓高亮显示。

Unity3d Hair real time rendering 真实头发实时渲染

本文是博主根据一些外文文档,翻译对加上自己的理解所做出的一款作品。效果很棒,大家可以点进去学习学习。

Unity5新版Shader模板源码解析

本文对Unity5中全新的三种Shader模板的源码进行了解析,然后还讲解了运动模糊屏幕特效的实现方法。

Unity3D和Android交互(Android调用Unity的场景)

Unity3D非常适合制作Android的游戏,但是制作普通的应用来说似乎没有在Eelipse下如此完美和得心应手。另外,一些硬件模块和软件的功能都已经在Eclipse下开发完成。因此,如果可以仅仅在Android端调用Unity中的场景,并实现一些交互就非常完美了。

Unity3D游戏开发之编辑器扩展程序开发实例

开发Unity3D编辑器扩展程序的命名空间主要是UnityEditor,在该命名空间下常用的类有EditorGUI、EditorGUILayout、EditorWindow等。为Unity3D编辑器开发的扩展程序同样是一种脚本,通常需要将脚本文件放在项目资源文夹下的Editor文件夹中,即Assets/Editor。
图片描述

扫描二维码,获取Unity3D知识库全部内容

更多内容请关注CSDN知识库。目前,CSDN已发布30多个技术领域知识库,每个知识库包含了专家精心绘制的知识图谱,及由特邀编辑(领域专家)从海量数据中层层筛选出的精华内容和资源(学习视频、实践Demo、图书)。

2014-11-13 20:51:14 book_longssl 阅读数 6248
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4646 人正在学习 去看看 张刚


 资源数据库 (AssetDatabase)
资源数据库 (AssetDatabase) 是允许您访问工程中的资源的 API。此外,其提供方法供您查找和加载资源,还可创建、删除和修改资源。Unity 编辑器 (Editor) 在内部使用资源数据库 (AssetDatabase) 追踪资源文件,并维护资源和引用资源的对象之间的关联。Unity 需要追踪工程文件夹发生的所有变化,如需访问或修改资源数据,您应始终使用资源数据库 (AssetDatabase) API,而非文件系统。 资源数据库 (AssetDatabase) 接口仅适用于编辑器,不可用于内置播放器。和所有其他编辑器类一样,其只适用于置于编辑器 (Editor) 文件夹中的脚本(只在主要的资源 (Assets) 文件夹中创建名为“编辑器”的文件夹(不存在该文件夹的情况下))。

导入资源

通常,只在需要时自动导入已拖放至该工程的资源,但也可能在脚本控制下导入这些资源。为此,您可以使用以下示例中的 AssetDatabase.ImportAsset 类函数。
using UnityEngine;
using UnityEditor;
 
public class ImportAsset {
[MenuItem ("AssetDatabase/ImportExample")]
static void ImportExample ()
{
AssetDatabase.ImportAsset("Assets/Textures/texture.jpg", ImportAssetOptions.Default);
}
}

您也可将额外的 AssetDatabase.ImportAssetOptions 类型参数传递至资源数据库 (AssetDatabase) 。脚本参考手册页面记录了不同的选项及其对函数行为的影响。

加载资源

如果将资源添加至场景或在检视 (Inspector) 面板中编辑这些资源,则编辑器仅在需要时加载资源。但是,您可以使用以下脚本加载和访问资源:AssetDatabase.LoadAssetAtPath、AssetDatabase.LoadMainAssetAtPath、AssetDatabase.LoadAllAssetRepresentationsAtPath 和 AssetDatabase.LoadAllAssetsAtPath。有关更多详细信息,请参阅脚本文档。

using UnityEngine;
using UnityEditor;
 
public class ImportAsset {
[MenuItem ("AssetDatabase/LoadAssetExample")]
static void ImportExample ()
{
Texture2D t = AssetDatabase.LoadAssetAtPath("Assets/Textures/texture.jpg", typeof(Texture2D)) as Texture2D;
}
}

使用 AssetDatabase 操作文件

 将保留资源文件的元数据,您决不可使用文件系统创建、移动或删除它们。相反,您应使用 AssetDatabase.Contains、AssetDatabase.CreateAsset、AssetDatabase.CreateFolder、AssetDatabase.RenameAsset、AssetDatabase.CopyAsset、AssetDatabase.MoveAsset、AssetDatabase.MoveAssetToTrash 和 AssetDatabase.DeleteAsset 进行上述操作。

public class AssetDatabaseIOExample {
[MenuItem ("AssetDatabase/FileOperationsExample")]
static void Example ()
{
string ret;
 
// Create
Material material = new Material (Shader.Find("Specular"));
AssetDatabase.CreateAsset(material, "Assets/MyMaterial.mat");
if(AssetDatabase.Contains(material))
Debug.Log("Material asset created");
 
// Rename
ret = AssetDatabase.RenameAsset("Assets/MyMaterial.mat", "MyMaterialNew");
if(ret == "")
Debug.Log("Material asset renamed to MyMaterialNew");
else
Debug.Log(ret);
 
// Create a Folder
ret = AssetDatabase.CreateFolder("Assets", "NewFolder");
if(AssetDatabase.GUIDToAssetPath(ret) != "")
Debug.Log("Folder asset created");
else
Debug.Log("Couldn't find the GUID for the path");
 
// Move
ret = AssetDatabase.MoveAsset(AssetDatabase.GetAssetPath(material), "Assets/NewFolder/MyMaterialNew.mat");
if(ret == "")
Debug.Log("Material asset moved to NewFolder/MyMaterialNew.mat");
else
Debug.Log(ret);
 
// Copy
if(AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(material), "Assets/MyMaterialNew.mat"))
Debug.Log("Material asset copied as Assets/MyMaterialNew.mat");
else
Debug.Log("Couldn't copy the material");
// Manually refresh the Database to inform of a change
AssetDatabase.Refresh();
Material MaterialCopy = AssetDatabase.LoadAssetAtPath("Assets/MyMaterialNew.mat", typeof(Material)) as Material;
 
// Move to Trash
if(AssetDatabase.MoveAssetToTrash(AssetDatabase.GetAssetPath(MaterialCopy)))
Debug.Log("MaterialCopy asset moved to trash");
 
// Delete
if(AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(material)))
Debug.Log("Material asset deleted");
if(AssetDatabase.DeleteAsset("Assets/NewFolder"))
Debug.Log("NewFolder deleted");
 
// Refresh the AssetDatabase after all the changes
AssetDatabase.Refresh();
}
}

使用 AssetDatabase.Refresh

修改完资源后,您应调用 AssetDatabase.Refresh 将更改提交至数据库,并使其显示在工程中。


2018-03-16 15:58:00 MadBam_boo 阅读数 874
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4646 人正在学习 去看看 张刚

Unity3d实战之Unity3d网络游戏实战篇(7):数据管理类DataMgr

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍,如有侵权请联系,必删。

 DataMgr是封装数据库操作的类,它实现了用户名密码验证、注册、创建角色、获取角色数据、保存角色数据。
 
 Register:向user表插入user_name 和 password;
 CreatePlayer:创建默认PlayerData并存入player中;
 CheckPassWord:检查user_name 和 password对能否在user表中找到对应数据;
 GetPlayerData:根据user_name在player找出对应的data;
 SavePlayer:根据user_name更新player中的data;

 辅助用的方法:
 private bool IsSafeStr(string str);
 通常,我们注册一个账号、创建一个新角色并给他输入昵称时会看到有一些字符是不允许输入的,这是为了防止sql注入,所谓sql注入就是用户在用户名栏或者密码栏中恶意输入sql命令,由于程序是通过用户输入来进行数据库查询的,因此很有可能会发生数据库被破坏的情况。例如:
 用户注册了用户名为”xiaoming; delete * from player;”的名字,该字符串传到程序中会执行如下数据库操作命令:
 select * from player where id=xiaoming; delete * from player;
 瞬间爆炸!所以一定要对用户的输入进行特殊字符的排除!

/// <summary>
/// Check the string , if it has illegal characters.
/// </summary>
/// <returns><c>true</c> if this instance is safe string the specified str; otherwise, <c>false</c>.</returns>
/// <param name="str">string</param>
bool IsSafeStr(string str)
{
    return !Regex.IsMatch (str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}

 private bool canRegister(string id, string pw);
 用于检测用户输入的用户名和密码是否已注册,实现方法如下:

/// <summary>
        /// Check the password.
        /// </summary>
        /// <returns><c>true</c>, if password was checked, <c>false</c> otherwise.</returns>
        /// <param name="id">user_name</param>
        /// <param name="pw">password</param>
        public bool CheckPassword(string id, string pw)
        {
            if (!IsSafeStr (id) || !IsSafeStr (pw)) {
                Console.WriteLine ("[DataMgr.CheckPassword] Illegal characters.");
                return false;
            }

            string formatStr = "select * from user where id='{0}' and pw='{1}';";
            string cmdStr = string.Format (formatStr, id, pw);
            MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);

            try {
                MySqlDataReader dataReader = cmd.ExecuteReader();
                bool hasRow = dataReader.HasRows;
                dataReader.Close();
                return hasRow;
            } catch (Exception ex) {
                Console.WriteLine ("[DataMgr.CheckPassword] Read data fail. " + ex.Message);
                return false;
            }
        }

 余下的Register、CreatePlayer等方法的实现都是使用不同的SQL语句来实现查询、插入、读取数据等操作。编写代码的过程中要注意代码风格的一致性以及异常捕获后输出的提示信息要清晰明了,防止后面Debug的时候找不着北…血与泪的教训。
 给出两个Sample:
 

/// <summary>
/// Check the password.
/// </summary>
/// <returns><c>true</c>, if password was checked, <c>false</c> otherwise.</returns>
/// <param name="id">user_name</param>
/// <param name="pw">password</param>
public bool CheckPassword(string id, string pw)
{
    if (!IsSafeStr (id) || !IsSafeStr (pw)) {
        Console.WriteLine ("[DataMgr.CheckPassword] Illegal characters.");
        return false;
    }

    string formatStr = "select * from user where id='{0}' and pw='{1}';";
    string cmdStr = string.Format (formatStr, id, pw);
    MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);

    try {
        MySqlDataReader dataReader = cmd.ExecuteReader();
        bool hasRow = dataReader.HasRows;
        dataReader.Close();
        return hasRow;
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CheckPassword] Read data fail. " + ex.Message);
        return false;
    }
}
/// <summary>
/// Create a playerData for player whose id is args' id.
/// </summary>
/// <returns><c>true</c>create player success, <c>false</c>can't create player</returns>
/// <param name="id">user_name</param>
public bool CreatePlayer(string id)
{
    if (!IsSafeStr (id)) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Illegal characters.");
        return false;
    }

    PlayerData playerData = new PlayerData ();
    MemoryStream stream = new MemoryStream ();
    BinaryFormatter formatter = new BinaryFormatter ();

    try {
        formatter.Serialize(stream, playerData);
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Serialize data fail. " + ex.Message);
        return false;
    }

    byte[] dataBytes = stream.ToArray ();

    string formatStr = "insert into player set id='{0}', data=@data;";
    string cmdStr = string.Format (formatStr, id);
    MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);
    cmd.Parameters.Add ("@data", MySqlDbType.Blob);
    cmd.Parameters [0].Value = dataBytes;

    try {
        cmd.ExecuteNonQuery();
        return true;
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Execute command fail. " + ex.Message);
        return false;
    }
}
2019-06-24 19:24:43 MakerLiu 阅读数 539
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4646 人正在学习 去看看 张刚

1.创建工程

第一步:双击Unity3d,点击New

在这里插入图片描述

第二步:填写项目信息,注意:工程必须放在空文件夹下

在这里插入图片描述

第三步:点击创建

在这里插入图片描述

第四步:工程创建完毕

在这里插入图片描述

文件夹介绍:

Assets:放项目所有资源的文件夹

Library:文件资源库

ProjectSettings:项目配置文件夹

Temp:临时文件夹,当项目关闭,Temp文件夹也会消失

2.保存工程

在这里插入图片描述

或修改后关闭Unity时会提示是否保存工程

在这里插入图片描述

3.打开工程

在这里插入图片描述

或打开Unity编辑器,选择你的工程

在这里插入图片描述

4.改变布局及导入导出资源

1.改变布局

在这里插入图片描述

2.导入资源

注意:导入资源建议从编辑器中导入,不要直接粘贴到硬盘目录中。

a.导入单个或多个资源

在这里插入图片描述

在这里插入图片描述

b.导入资源包

如果资源有很多,要一个一个选很麻烦,这时可以选择导入资源包

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.导出资源

导出资源只能把资源导成资源包,也就是后缀为.unitypackage,如果小伙伴要单个资源就直接磁盘拷贝给他

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.工作区的介绍

a.有五大视图,分别是场景视图,游戏视图,工程视图,结构视图,属性视图

在这里插入图片描述

b.七大菜单,分别是文件(File),编辑(Edit),资源(Assets),游戏对象(GameObject),组件(Component),窗口(Window),帮助(Help)

在这里插入图片描述

c.辅助工具,有工具栏,控制台,资源商店

工具栏有以下工具:

1.变换工具(用于场景视图)
在这里插入图片描述

2.变换Gizmo切换
在这里插入图片描述
​ 第一个按钮是切换轴心点,第二个按钮是切换全局和局部坐标

3.播放,暂停,逐帧按钮
在这里插入图片描述

4.层下拉菜单
在这里插入图片描述
​ 控制哪层对象显示在场景视图

5.布局下拉菜单
在这里插入图片描述
​ 控制所有视图布局

6.云服务,账户
在这里插入图片描述

控制台:

在这里插入图片描述

资源商店:

在这里插入图片描述

6.打开式例工程

第一步:打开Unity,选择示例工程

在这里插入图片描述
在这里插入图片描述

第二步:选择Car场景,双击

在这里插入图片描述

第三步:打开了汽车场景

在这里插入图片描述

7.场景视图

场景视图,该视图主要是用于游戏的可视化制作

鼠标聚焦到场景视图,可以进行以下操作

1.变换工具(用于场景视图)

在这里插入图片描述

变换工具有手工具(Q),移动工具(W),旋转工具(E),缩放工具(R),缩放工具(T)

手工具(Q):

​ 1.点击手工具按钮或按键盘Q,然后可以直接拖动场景,用于观察场景

​ 2.按住ALT再点击鼠标左键拖拽,则是改变摄像机的观察方向(以所选游戏对象为中心)

​ 3.按住ALT再点击鼠标右键拖拽,则是改变摄像机的观察距离

​ 4.按住Control再按鼠标的左键和单独按鼠标的右键一样功能,水平滑动改变摄像机的水平观察方向,竖直滑动改变摄像机的竖直观察方向(第一人称视角)

​ 5.按住鼠标中键,侧是手工具,滑动中键改变摄像机的观察距离

移动工具(W):

​ 1.红色表示X轴,绿色表示Y轴,蓝色表示Z轴

旋转工具(E):

​ 1.红色线圈表示围绕X轴旋转,绿色线圈表示围绕Y轴旋转,蓝色线圈表示围绕Z轴旋转

缩放工具(R):

​ 1.红色表示沿X轴缩放,绿色表示沿Y轴缩放,蓝色表示沿Z轴缩放(不改变游戏对象的位置)

缩放工具(T):

​ 1.以拖住的点或线的对角为基点或基线改变游戏对象的大小(会改变游戏对象的位置)

2.辅助查看按钮

在这里插入图片描述

辅助查看按钮有Shaded,2D,太阳,声音,小图标,Gizmos,搜索栏

Shaded:

​ 渲染模式菜单,可以查看场景的各种渲染模式

2D:

​ 是否转换成2D

太阳:

​ 是否开启光照

声音:

​ 是否开启声音

小图标:

​ 是否开启天空盒

Gizmos:

​ 是否显示场景中的哪些对象

搜索栏:

​ 搜索游戏对象,可以让其他非选中的游戏对象成灰色状态

3.视图角度切换按钮

在这里插入图片描述

该按钮主要用于置摄像机观察角度

是否启用该按钮

在这里插入图片描述

远近景切换

在这里插入图片描述

在这里插入图片描述

X轴查看

在这里插入图片描述

Y轴查看

在这里插入图片描述

Z轴查看

在这里插入图片描述

透视,正交模式

在persp模式下,物体在scene界面上所呈现的画面是给人一种距离摄像头近的物体显示的大,距离摄像头远的物体显示的小。

在ISO模式下,不论物体距离摄像头远近都给人的感觉是一样大的

在这里插入图片描述

在这里插入图片描述

4.场景视图的快捷键

1.Ctrl+F聚焦到搜索栏

2.Ctrl+A全选

3.Ctrl+C复制

4.Ctrl+V粘贴

5.Ctrl+D复制粘贴

6.Fn+退档键(mac),删除键(WIN)

7.选中游戏对象按F键可以使游戏对象在Scene场景正中央

8.游戏视图

​ 该视图是显示游戏运行时的图像,Game视图显示的内容取决于摄像机所观察到的景象

在这里插入图片描述

游戏视图上的操作按钮

在这里插入图片描述

Display 1:表示当前是哪个摄像机看到的画面

Free Aspect:分辨率菜单

Scale:放大视图

Maximize on Play:是否在运行时最大化显示

Mute audio :是否静音

Stats :查看当前画面对应的数据

Gizmos :是否显示Gizmos,和场景视图的Gizmos一样

注意:运行游戏时也可以改变游戏对象等的属性,但是游戏结束都消失

9.工程视图

该视图罗列了工程的所有资源

在这里插入图片描述

1.工程视图的各块说明

在这里插入图片描述

从左到右分别是,创建资源,资源搜索栏,资源类型过滤,资源标签过滤,收为常用资源

下面图为常用资源

在这里插入图片描述

下图为文件夹文件列表目录及显示视图

在这里插入图片描述

2.快捷键

1 F定位到上次选择

2 Tab在第一列和第二列之间切换焦点(适用两列布局)

3 Ctrl/Cmd +F聚焦搜索栏中

4 Ctrl/Cmd +A在列表中选择全部可见项

5 Ctrl/Cmd +D复制选择的资源

6 Delete带有对话框删除(Fn+Delete)

7 Delete+Shift无对话框删除(Fn+Delete+Shift)

8 Cmd+Backspace(退档键)(OSX)无对话框删除

9 Enter重命名(OSX)

10 F2重命名(WIN)

11 Right arrow展开选择的项(树视图和搜索结果)

12 Left arrow折叠选择的项(树视图和搜索结果)

13 Alt+Right arrow展开列表所有项

14 Alt+Left arrow塌陷列表所有项

3.搜索

1.直接输入名字

在这里插入图片描述

2.加t过渡条件来显示文件,如搜索场景文件(t:Scene)

在这里插入图片描述

3.加l标签过渡文件

在这里插入图片描述

4.资源类型过滤,其实和在搜索栏搜索是加t是一样的

在这里插入图片描述

5.标签过滤

在这里插入图片描述

6.收为常用资源

在这里插入图片描述

如果选择新建目录,如下图

在这里插入图片描述

4.创建资源及工程视图中的资源操作

在这里插入图片描述

右键出现的菜单说明:

1 Create:创建各种资源

​ 1.1 Folder文件夹

​ 1.2 C#Script:脚本文件

​ 1.3 JavaScript:脚本文件

​ 1.4 Prefab:预制体

​ 1.5 Material材质

2 Show in Explorer:在文件夹视图中显示资源

3 Open:打开文件

4 Delete:删除文件

5 Import New Asset…:导入新资源

6 Import Package:导入包

7 Export Package…:导出包

8 Find References In Scene:选中资源,右键点击该项,Scene视图中使用了该资源的游戏对象正常,其他显灰色,Hierarchy视图只显示使用该资源的游戏对象。

9 Select Dependencies:资源本身和所依赖的所有资源会以蓝色高亮显示

10 Refresh:刷新

11 Reimport:重新导入选中资源

12 ReimportAll:重新导入所有资源

13 Open C# Project:打开编程文件

10.结构视图

显示场景中所有的游戏对象(以名字的方式显示)

在这里插入图片描述

1.层次结构关系

1 父子关系

在这里插入图片描述

2 改变父子关系,通过拖拽方式来改变

在这里插入图片描述

在这里插入图片描述

2.搜索条搜索对象

其他对象程灰色的,突出搜索对象

在这里插入图片描述

3.搜索对象中的组件

直接输入组件的全称,会显示使用了该组件的对象

在这里插入图片描述

4.快捷键的使用

选中游戏对象,按上档键+F键,场景视图的游戏对象会出现在场景视图的正中央

5.创建游戏对象

在这里插入图片描述

菜单说明:

1 Create Empty:创建空的游戏对象

2 Create Empty Child:创建空的子游戏对象

3 3D Object:创建3D游戏对象

4 2D Object:创建2D游戏对象

5 Effects:特效

6 Light:创建与光照有关游戏对象

7 Audio:创建与声音有关游戏对象

8 UI:创建与游戏界面UI有关游戏对象

9 Camera:创建摄像机

11.属性视图

显示当前选中游戏对象的所有组件及组件的属性

在这里插入图片描述

1.游戏对象和组件及属性

在这里插入图片描述

2.游戏对象中的组件操作

添加组件

在这里插入图片描述

在这里插入图片描述

删除组件

在这里插入图片描述

禁止组件和恢复组件在游戏对象中的作用

在这里插入图片描述

3.改变游戏对象的属性

改变组件中的数据其实就是改变游戏对象的属性

在这里插入图片描述

4.游戏对象中脚本组件中的属性定义及初始化

第一步:创建脚本,取名为Maker

在这里插入图片描述

第二步:把脚本拖拽到游戏对象的属性视图中

在这里插入图片描述

在这里插入图片描述

第三步:编辑脚本

在这里插入图片描述

第四步:定义一个公共的游戏对象,可以看到属性视图中显示了这个游戏对象

在这里插入图片描述

在这里插入图片描述

第五步:从结构视图或工程视图中拖拽游戏对象填充到属性视图中的变量

在这里插入图片描述

在这里插入图片描述

注意:

1.脚本中定义的变量要是公共的才会在属性视图中显示

2.拖拽的对象要和脚本中定义的变量类型一样

12.视图之间的联合操作

1.工程视图和场景视图的联合操作

在这里插入图片描述

2.工程视图和结构视图的联合操作

在这里插入图片描述

3.工程视图和属性视图的联合操作

在这里插入图片描述

4.结构视图和属性视图的联合操作

在这里插入图片描述

5.结构视图和场景视图的联合操作

在这里插入图片描述

总的来说视图之间的联合操作就用拖拽方式

13.菜单介绍

有七大菜单,分别是文件,编辑,资源,游戏对象,组件,窗口,帮助

1.文件(File)

1 New Scene:创建场景

2 Open Scene:打开场景

3 Save Scene:保存场景(游戏运行时不能保存场景)

4 Save Scene as:另存场景(游戏运行时不能保存场景)

5 New Project:创建工程

6 Open Project:打开工程

7 Save Project:保存工程

8 Build Settings:建造设置

9 Build&Run:建造并运行

2.编辑(Edit)

1 Undo:撤销

2 Redo:重做

3 Cut:剪切

4 Copy:复制

5 Paste:粘贴、

6 Duplicate:复制粘贴(Ctrl+D)

7 Delete:删除

8 Frame Selecte:Scene视图里当前镜头移动到所选物体前

9 Lock View to Selecte:在Hierarchy视图里选择游戏对象,Scene视图该游戏对象会变化

10 Find:查找(Ctrl+F)

11 Select All:选择全部(Ctrl+A)

12 Preferences:偏好设置

​ 12.1设置使用哪种脚本编辑器

​ 12.2设置颜色

13 Modules…:查看模块

14 Play:播放

15 Pause:暂停

16 Step:逐帧

17 Sign in:注册登记

18 Sign out :注册离开

19 Selection:载入和存储选择

20 Project Settings:工程设置

21 Netword Emulation :网络模拟

22 Graphics Emulation :图形模拟

23 Snap Settings :对齐设置

3.资源(Asset)

该菜单是创建各种资源,和工程视图右键出现的菜单一样

1 Create:创建各种资源

​ 1.1 Folder文件夹

​ 1.2 C#Script:脚本文件

​ 1.3 JavaScript:脚本文件

​ 1.4 Prefab:预制体

​ 1.5 Material材质

2 Show in Explorer:在文件夹视图中显示资源

3 Open:打开文件

4 Delete:删除文件

5 Import New Asset…:导入新资源

6 Import Package:导入包

7 Export Package…:导出包

8 Find References In Scene:选中资源,右键点击该项,Scene视图中使用了该资源的游戏对象正常,其他显灰色,Hierarchy视图只显示使用该资源的游戏对象。

9 Select Dependencies:资源本身和所依赖的所有资源会以蓝色高亮显示

10 Refresh:刷新

11 Reimport:重新导入选中资源

12 ReimportAll:重新导入所有资源

13 Open C# Project:打开编程文件

4.游戏对象(GameObject)

和结构视图中的Create菜单一样

1 Create Empty:创建空的游戏对象

2 Create Empty Child:创建空的子游戏对象

3 3D Object:创建3D游戏对象

4 2D Object:创建2D游戏对象

5 Effects:特效

6 Light:创建与光照有关游戏对象

7 Audio:创建与声音有关游戏对象

8 UI:创建与游戏界面UI有关游戏对象

9 Camera:创建摄像机

5.组件(Component)

1 Add:选择添加组件

2 Mesh:网络模型

3 Effect:效果

4 Physics:物理

5 Physics 2D:物理2D

6 Navigation:导航

7 Audio:声音

8 Rendering:渲染

9 Layout:布局

10 Miscellaneous:其他

11 Scipts:脚本

12 Event:事件

13 Netword:网络

14 UI

15 Image Effect:图片效果

6.窗口(Window)

1 Next Window:下个窗口

2 Previous Window:上个窗口

3 Layouts:布局

4 Services:Unity服务

5 Scene:场景窗口

6 Game:游戏窗口

7 Inspector:属性窗口

8 Hierarchy:结构(层次)窗口

9 Project:工程窗口

10 Animation:动画窗口

11 Profiler:分析器窗口(各种资源使用情况)

12 Audio Mixer:音频混频器窗口

13 Asset Store:资源商店窗口

14 Version Control:版本控制窗口

15 Animator:动画组件窗口

16 Animator Parameter:动画参数窗口

17 Sprite Packer:精灵状态机窗口

18 Lighting:光照窗口

19 Occlusion Culling:遮挡剪贴窗口

20 Farme Debugger:框架调试窗口

21 Navigation:导航窗口

22 Console:控制台

7.帮助(Help)

1 About Unity…:关于Unity

2 Manage License…:授权许可

3 Unity Manual :Unity手册

4 Scripting Reference:脚本手册

5 Unity Connect:连接服务

6 Unity Forum:论坛

7 Unity Answers:问答

8 Unity Feedback:反馈

9 Check for Updates:检测新版本

10 Download Beta…:下载

11 Release Notes:发行说明

12 Report a Bug…:报告Bug

14.游戏对象介绍

1 空游戏对象

2 矩形:Cube

3 球形:Spher

4 胶囊:Capsule

5 圆柱体:Cylinder

6 平面:Plane

7 空铅:Quad

8 地形:Terrain

9 树:Tree

10 风:WindZone

11 3D文本:3DText

12 光:Light

​ 12.1方向光:Directional Light

​ 12.2点光源:Point Light

​ 12.3聚光源:Spotlight

​ 12.4区域光:Area Light

13 粒子系统:Particle System

14 摄像机:Camera

2015-01-28 11:27:16 book_longssl 阅读数 958
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4646 人正在学习 去看看 张刚

 

      做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会毫无遮掩的呈现出来。由于.net本身没什么加密的措施,所以我们一般都是使用混淆代码的方式来对程序进行一定的加密。接下来2篇博客,简单的讲一下我自己在Unity3D的程序加密做法。首先第一篇,我会简单的说明一下怎样在里面使用dll动态链接库,然后第二篇会说明怎样对dll进行混淆。

开始第一篇的内容:



首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做。我这里是使用vs2012来创建:




选择好项目类型、写好项目名称。

新生成的项目里面默认有一个Class1类



可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D



然后写一个简单的静态方法在里面。这里我写了个最简单的加法(Add)。也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以。这和正常的C#编程没区别。



写好之后,在资源管理器里面选择“生成”,那么在项目的bin/debug 里面就会看到dll文件,比如我这个额项目就是AzhaoDll.dll



接下来在Unity3D里面创建你需要的项目,把刚才的dll文件随便放到项目的Assets文件夹里面。关于这个dll文件的存放位置,网上有些人说是必须放在插件文件夹里面,其实是不需要的,放在任意位置它都能被识别出来。当然,按照良好的项目路径习惯,我们建立一个专门放插件的文件夹来存放dll文件,也是合理的。

然后在Unity3D里面创建一个C#脚本,写一行简单的代码来调用我们刚才写的Math3D.Add方法。



这时会发现Math3D类不能识别,我们using AzhaoDll命名空间



然后在Unity3D里把脚本挂到摄像机上,运行,可以看到打印出正确的结果了,这就证明了dll已经被成功调用了。



回顾刚才我们做的一些小细节,在类库项目的Math3D类里面。我们默认的使用了AzhaoDll命名空间。那么假如我们不使用命名空间,或者使用其他的命名空间行不行?答案是可以的,命名空间可以任意的更改,如果不用命名空间,那么在调用的时候就不需要using,如果使用了其他命名空间,对应的using其命名空间就行了。

以下试试把命名空间删掉:



那么在Unity3D里面调用就直接可以用了:


运行的结果也是正常的:



当然,不太建议不使用命名空间,这样做一个说明,是因为本身创建的脚本默认没有使用命名空间,只是想说明如果不想麻烦,直接把没有命名空间的脚本直接拿来编译也是可以的。

再次回顾细节,刚才我们使用的是原生的C#,假如我们需要在类库项目写调用本身功能的方法怎样办呢?

在的安装目录EditorDataManaged里面,找到UnityEditor.dll和UnityEngine.dll两个文件。


然后在类库项目里面添加引用,把这两个dll添加进来



这时候,我们就可以在类库项目里面using UnityEngine来使用Unity3D的方法了,比如我们这里简单写了个CreateGameObject方法,生成一个名字为“CreateByDll”的gameobject。



生成dll,放回Unity3D项目里,我们就可以调用这个方法:


运行,看到这个叫做“CreateByDll”的物体生成出来了。


通过以上的说明,我们会发现其实生成自己的dll在Unity3D里面用是很简单的事情。我们还可以添加其他自己写好的类进类库项目,然后生成dll来使用。



最后说一下注意事项了。
刚才生成的dll在Unity3D编辑器里面基本上都是能用的,但不一定能通过编译。有可能在编译成exe或者apk等时会报错。
需要注意的是,类库项目使用的.Net Framework版本。我自己的尝试是,使用.Net 4.0以上版本发布的dll,在Unity3D里面会编译不通过。所以我们可以用2.0或者3.0之类的版本来发布。


还有一些情况是某些现成的dll动态库是使用完整的.Net2.0来发布的,所以我们在编译的时候有可能需要选择完整的.Net 2.0来发布。




到了这一步,我们就可以把的整个代码文件夹里面所有的脚本剪切到类库项目里面生成dll,然后放回Unity3D项目里面。这样别人就不能直接的编辑我们项目里面的代码了。

不过dll本身是不安全的,别人可以很容易看到里面的内容。下一篇博客我们再说明怎样去给dll做混淆。


Unity3D的iTween

阅读数 839

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