Unity3D引擎发布游戏 怎么生成后缀为后缀unity3d文件件

后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 9287|回复: 5
Unity3D怎么导出项目场景里相关文件
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
请问如何自动选择现在场景中所用到的文件呢?而不是整个项目文件夹。就类似于3dmax中的场景打包。
如何让别人关注你?
貌似无解。。。。。。
本楼回复(<span id="dp_count_)
如何让别人关注你?
不是吧& &现在一导出就是所有资源,我只想导出我现在场景内所用的资源
本楼回复(<span id="dp_count_)
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
找到资源包,拖出来就好,貌似是第2个就可以打开资源包
本楼回复(<span id="dp_count_)
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered byUnity3D读取模型文件自动生成AnimatorController简单实例
我的图书馆
Unity3D读取模型文件自动生成AnimatorController简单实例
阅读目录1.需求及规范2.功能实现3.总结前几天接到一个任务,做一个导入、控制模型动画的工具类,没有太具体的要求,于是就自行思考实际需求,最终根据宣雨松老师的一篇博客,自己规范了一下写了一个工具类。相关工具代码及测试用例已上传至Github。
该demo需在导入Unity后执行菜单Tools/CreateAnimator项后再执行。
回到顶部1.需求及规范
需求是指实际使用时需要实现的地方,规范是最终使用这套工具需要遵守的规则。
1.1 实际需求
1. 能自动遍历fbx文件,且生成对应的AnimatorController文件。
2. 能获取fbx文件中所有的动画片段(AnimationClip),并存入第一步生成的AnimatorController的状态机中。
3.(个人假设需求)状态机默认指向一个空的动画。&
1.2 使用规范
1. 所有fbx文件需放置在Assets/Resources/fbx目录(该目录可在代码中更改)中的子目录中,该子目录以fbx名称(不可包含中文)命名,将fbx文件和贴图放到该子目录中,然后将fbx文件重命名为原名_model。
如:wukong.fbx。因和其贴图一起放置在&Assets\Resources\fbx\wukong目录中,然后改名为wukong_model.fbx。
回到顶部2.功能实现
该部分主要介绍逻辑功能代码
2.1 生成菜单方法
在Editor目录下添加类文件AnimatorTool.cs,该类共有三个方法:
void CreateAnimationAssets(): 工具菜单方法,内有遍历目录生成动画控制器、生成预设的逻辑
using UnityE
using System.C
using System.IO;
using System.L
using UnityE
using UnityEditor.A
public class AnimatorTool : MonoBehaviour
/// &summary&
/// 菜单方法,遍历文件夹创建Animation Controller
/// &/summary&
[MenuItem("Tools/CreateAnimator")]
static void CreateAnimationAssets()
string rootFolder = "Assets/Resources/fbx/";
if (!Directory.Exists(rootFolder))
Directory.CreateDirectory(rootFolder);
// 遍历目录,查找生成controller文件
var folders = Directory.GetDirectories(rootFolder);
foreach (var folder in folders)
DirectoryInfo info = new DirectoryInfo(folder);
string folderName = info.N
// 创建animationController文件
AnimatorController aController =
AnimatorController.CreateAnimatorControllerAtPath(string.Format("{0}/animation.controller", folder));
// 得到其layer
var layer = aController.layers[0];
// 绑定动画文件
AddStateTranstion(string.Format("{0}/{1}_model.fbx", folder, folderName), layer);
// 创建预设
GameObject go = LoadFbx(folderName);
PrefabUtility.CreatePrefab(string.Format("{0}/{1}.prefab", folder, folderName), go);
DestroyImmediate(go);
/// &summary&
/// 添加动画状态机状态
/// &/summary&
/// &param name="path"&&/param&
/// &param name="layer"&&/param&
private static void AddStateTranstion(string path, AnimatorControllerLayer layer)
AnimatorStateMachine sm = layer.stateM
// 根据动画文件读取它的AnimationClip对象
var datas = AssetDatabase.LoadAllAssetsAtPath(path);
if (datas.Length == 0)
Debug.Log(string.Format("Can't find clip in {0}", path));
// 先添加一个默认的空状态
var emptyState = sm.AddState("empty");
sm.AddAnyStateTransition(emptyState);
// 遍历模型中包含的动画片段,将其加入状态机中
foreach (var data in datas)
if (!(data is AnimationClip))
var newClip = data as AnimationC
if (newClip.name.StartsWith("__"))
// 取出动画名字,添加到state里面
var state = sm.AddState(newClip.name);
state.motion = newC
// 把State添加在Layer里面
sm.AddAnyStateTransition(state);
/// &summary&
/// 生成带动画控制器的对象
/// &/summary&
/// &param name="name"&&/param&
/// &returns&&/returns&
public static GameObject LoadFbx(string name)
var obj = Instantiate(Resources.Load(string.Format("fbx/{0}/{0}_model", name))) as GameO
obj.GetComponent&Animator&().runtimeAnimatorController =
Resources.Load&RuntimeAnimatorController&(string.Format("fbx/{0}/animation", name));
2.2 测试用例
测试用例中主要包含如何调用播放动画、暂停动画、重播动画等功能。
using UnityE
using System.C
public class AnimatorTest : MonoBehaviour
public string animationName = "run";
public float Speed = 1.0f;
// Use this for initialization
void Start()
animator = GetComponent&Animator&();
/// &summary&
/// 添加一些测试功能按钮
/// &/summary&
void OnGUI()
#if UNITY_EDITOR
if (GUILayout.Button("Play"))
Play(animationName);
if (GUILayout.Button("Replay"))
RePlay(animationName);
if (GUILayout.Button("Pause"))
/// &summary&
/// 设置速度
/// &/summary&
/// &param name="speed"&&/param&
public void SetSpeed(float speed)
/// &summary&
/// 重新播放指定名称动画
/// &/summary&
/// &param name="name"&&/param&
public void RePlay(string name)
animator.speed = S
animator.Play(name, 0, 0.0f);
/// &summary&
/// 播放指定名称动画
/// &/summary&
/// &param name="name"&&/param&
public void Play(string name)
animator.speed = S
animator.Play(name);
/// &summary&
/// 暂停动画
/// &/summary&
public void Pause()
animator.speed = 0.0f;
回到顶部3.总结
该工具在项目实际使用中还有许多待优化的地方,如只考虑了一个模型,如果是一个人物有多个模型那么还要根据需求再重新设计。还有状态机中还没有根据模型直接生成结构动画、序列动画的功能,需要在以后继续改进。
本工具参考了宣雨松老师的一篇博客:
如有问题请指正,谢谢!1.需求及规范1.1 实际需求1.2 使用规范2.功能实现2.1 生成菜单方法2.2 测试用例3.总结
TA的最新馆藏
喜欢该文的人也喜欢1、为什么要进行版本号控制?
??当我一个人写代码的时候,在我的脑海中是不存在版本号控制这个概念的。由于我对整个项目的代码如数家珍。但是当我和一群人在一起写代码的时候。我可能并不会清楚团队中有谁改动了哪一行代码,即使是一个变量的名称或者是一个函数的名称。在我毫不知情的情况下,可能这种改动会使得程序无法执行。这个时候我须要版本号控制;虽然Unity3D是一个适合小团队开发的游戏引擎,但是即使再小的团队相同会有不同的分工,当大家须要将各自的工作合并到一个完整的项目中的时候,这个时候我须要版本号控制;当我须要了解团队成员实际的编程能力的时候。最好的方法是让他们參与到一个项目的开发中。这样我能够从他提交代码的情况了解他的工作能力。这个时候我须要版本号控制;当我希望时时刻刻对项目进行备份。并在某一个关键的时刻将项目恢复到一个正确的状态的时候,复制、黏贴不会让这个工作变得简单,这个时候我须要版本号控制。
2、如何在Unity3D中进行版本号控制?
??在Unity3D中进行版本号控制主要针对Assets和ProjectSetting这两个目录,由于除此以外的文件和目录都是Unity3D在执行过程中产生的暂时文件。这些文件会在使用Unity3D打开项目后又一次生成,因此无需对这些文件或目录进行版本号控制。好了,在了解了Unity3D版本号控制中须要关注的主要内容后。接下来我们要关注的是如何让版本号控制的软件对我们提交的内容进行差异化识别,我们知道版本号控制的一个核心任务就是将服务器上的文件和本地的文件进行比对,找出哪些文件是最新生成的、哪些文件是被改动过的等等。因此为了方便版本号控制软件对文件进行比对,经常须要项目变动的这些因素转化为文本形式,假设熟悉Github的朋友应该知道。Github中推断两个文件的差异就是依据文本(代码)来比較的。因此在Unity3D中使用版本号控制相同须要遵循这个原则,好在Unity3D在管理Unity3D项目时已经考虑到了这一点。通常在对Unity3D项目进行版本号控制的时候。我们须要做这种事情:
通过Edit-&Project Settings-&Editor菜单打开编辑器设置选项。将Version Control选项下的Mode设为Visual Meta Files。这样Unity3D将为项目中的每一个文件或者每一个目录生成相应的.Meta文件。该文件是一个文本文件,记录了相应文件的相关信息。版本号控制软件能够以此来对文件版本号进行对照和合并操作。
Unity3D中的资源默认是以二进制的形式进行组织的。这种组织方式对版本号控制来说是不合适的。因此须要通过通过Edit-&Project Settings-&Editor菜单打开编辑器设置选项,将Asset Serialization下的Mode设为Force Text。(这里要感谢@gtd138这位朋友,注意在5.0版本号中默认是Force Text即文本形式)
通过Edit-&Prefences-&External Tools找到Revision Control Diff/Merge选项,在安装了版本号控制软件后能够在这里找到相关的选项。以博主为例,博主使用的是TortoiseSVN,这里的选项是TortoiseMegre。眼下Unity3D支持的版本号控制软件有SourceGear DiffMerge、TKDiff、P4Megre、TortoiseMegre、WinMegre、PlasticSCM Megre。
??好了,在完毕以上准备工作后。我们就能够開始进行Unity3D项目的版本号控制了,眼下在Unity3D中我们主要有下面三种方式来对Unity3D项目进行版本号控制:
2.1、使用Asset Server进行版本号控制
??Unity3D的是一个Unity3D内部集成的版本号控制软件。它和我们熟知的SVN相似。适合在小团队内进行版本号控制。这是一个收费软件,虽然在某些方面它甚至比SVN还要方便,只是在实际的项目中使用这个的还是比較少的,所以假设大家对这个感兴趣。能够从这里了解它的详细情况。这里我们不打算介绍这个软件的使用。
2.2、使用Github进行版本号控制
??使用Github进行版本号控制时能够在Git仓库中加入一个.gitignore文件来对项目中须要同步的文件进行过滤,在文章開始我们已经知道Unity3D项目的版本号控制主要针对Assets和ProjectSetting这两个文件,因此.gitignore的内容能够这样填写:
*.userprefs
*.unityproj
*.DS_Store
??这样每次提交文件的时候Github将忽略这些文件的更改。关于Github的使用及其相关命令能够查看这里:
??Github中每一个仓库的容量限制为1G。适合小项目的版本号控制,对于大型项目的版本号控制应该考虑使用SVN。
2.3、使用SVN进行版本号控制
??使用SVN进行版本号控制时能够通过右键菜单将某些文件和目录加入到忽略的文件列表中,这样SVN在每次提交文件的时候将忽略这些文件的更改。这块儿事实上和Github的.gitignore是相同的。SVN经常使用的软件组合是 TortoiseSVN(client)+VisualSVN Server(服务端),详细内容请參考这2篇文章:和
??无论使用什么版本号控制软件,建立相关的代码提交规范和流程控制规范都是必要的,因此在团队中应该有一个人负责对团队成员提交的代码进行审核和规范化,这样能够降低由于由于代码提交而产生的各种问题。好了。今天这篇文章先写到这里了,希望大家喜欢!
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 unity打包后缀名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信