U3D 代码自动化生成定制预置体的旋转问题
//定制预置体
//要求:1,模型面向U3D的Z轴正向(由MAX导出时是面向U3D的X负向的)
//2,增加一些常用挂点,3增加一个圆形阴影片,4,添加包围盒
//根据这些要求制作预置休
static GameObject CreateCustomPrefab(string fbxResPath, string saveDir, string saveName)
{
Directory.CreateDirectory(saveDir);
var fbx = AssetDatabase.LoadAssetAtPath(fbxResPath, typeof(GameObject)) as GameObject;
if (fbx == null)
{
Debug.LogError("加载FBX失败:" + fbxResPath);
return null;
} //往预置体中添加阴影,挂点等。
//注意:必须先将FBX和阴影都实例化出来,设置好层次关系,然后保存为预置体 //////////////////////////////////////////////////////////////////////////
//制作出的预置体需要对模型朝向进行调整-旋转90度后让它刚好面向U3D的Z轴正向
//这个旋转不能施加到预置体的根上,因为进入游戏后,这个值将被人物走路的朝向值覆盖
//同样,旋转操作不能直接施加到模型的几何体上,因为它们将在骨骼变换中被覆盖 //生成根
var root = new GameObject(saveName); //挂上模型
var fbxgo = GameObject.Instantiate(fbx, root.transform);
fbxgo.transform.localRotation = Quaternion.Euler(, , );//旋转模型,使面向Z轴正向
fbxgo.name = "Mesh"; //添加阴影
var shadow = AssetDatabase.LoadAssetAtPath("assets/res/prefabs/char/shadow.prefab", typeof(GameObject)) as GameObject;
var shadowgo = GameObject.Instantiate(shadow);
shadowgo.name = "shadow";
shadowgo.transform.SetParent(root.transform); //添加包围盒
var cap = root.AddComponent<CapsuleCollider>();
cap.height = GameConst.charCapsuleHeight;
cap.radius = GameConst.charCapsuleRadius;
cap.center = new Vector3(, cap.height / -0.1f, ); //添加挂点,注意:这些挂点在未优化的FBX层级中已存在了(由MAX导出时,这些挂点选择与否都会导出,原因不明)
var fbxDir = Path.GetDirectoryName(fbxResPath);
var fpath = fbxDir + "/linkpts.txt";
if (!File.Exists(fpath))
{
EditorUtility.DisplayDialog("缺少挂点配置文件", fbxResPath, "ok");
}
else
{
var sr = new StreamReader(File.OpenRead(fpath), Encoding.ASCII);
var longStr = sr.ReadToEnd();
var dats = longStr.Split('\"'); for (var i = ; i < dats.Length; ++i)
{
if (dats[i] == "" || dats[i] == "\r\n")
continue;
var subdat = dats[i].Split(' ');
var lpt = new GameObject(subdat[]); //因为模型缩放了,挂点位置也要缩放
var fx = GameConst.modelFileScale * float.Parse(subdat[]);
var fy = GameConst.modelFileScale * float.Parse(subdat[]);
var fz = GameConst.modelFileScale * float.Parse(subdat[]); lpt.transform.position = new Vector3(fx, fy, fz);
lpt.transform.SetParent(root.transform);
}
} var pb = PrefabUtility.CreatePrefab(saveDir + saveName, root); //删除场景中生成的模型和阴影实例
GameObject.DestroyImmediate(root);
GameObject.DestroyImmediate(fbxgo);
GameObject.DestroyImmediate(shadowgo); return pb;
}
U3D 代码自动化生成定制预置体的旋转问题的更多相关文章
- 【Unity】工具类系列教程—— 代码自动化生成!
转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了 ...
- 不可能的工作:在FBX模型导入脚本中生成模型的预置体
#if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using System.IO; using ...
- Guns自动化生成代码使用
一.Guns简介 Guns基于Spring Boot2,致力于做更简洁的后台管理系统.包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成 ...
- [goa]golang微服务框架学习(二)-- 代码自动生成
之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...
- GhostDoc Pro v4.9.14093.Cracked.By.SubMain 一款好用的代码注释生成工具——VS插件
一款比较好用的 VS 插件,能够快速生成注释. 这是 Pro 版本,与标准版本相比,支持对类.文件批量生成注释并且可以生成 CHM 帮助文件. 具体差异请转到: http://submain.com/ ...
- 使用C#通过调用minitab的COM库自动化生成报表
本文介绍通过C#调用minitab com组建自动化生成报表的方法. 首先需要在minitab中通过手动配置的方式生成报表来得到该报表的命令行,过程如下 选择菜单“编辑器”->“启用命令”启用命 ...
- 通过shell脚本实现代码自动化部署
通过shell脚本实现代码自动化部署 一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打 ...
- 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 第2版:htt ...
- 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目
自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...
随机推荐
- maven搭建ssm框架问题总结
1. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile (default-comp ...
- Python学习-str与byte类型以及编码
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- test20181029 思考熊的马拉松
题意 思考熊的马拉松 问题描述 今年,n只思考熊参加了校园马拉松比赛.马拉松的赛道是环形的,每圈的长度是A,完成比赛需要跑L圈. 比赛中,甲领先乙很长距离,绕过一圈或多圈后从后面追上了乙的现象叫做&q ...
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- 军哥LNMP优化
http://bbs.vpser.net/thread-8914-1-1.html http://www.zxsdw.com/index.php/archives/881/ 修改/usr/local/ ...
- 使用php生成数字、字母组合验证码(一)
项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...
- JDBC 流程
转载地址:https://blog.csdn.net/suwu150/article/details/52744952 JDBC编程的六个步骤: 准备工作中导入ojdbc文件,然后右键选中添加路 ...
- linux误删数据恢复
linux下数据恢复工具有: 1.通过分析文件系统的日志,解析文件的inode,可以恢复ex3 ex4的文件系统下的数据 extundelete:扫描inode和恢复数据同时进行,因此恢复速度很快.支 ...
- javascript基础-js继承
1.prototype方式 示例:没有使用prototype(下列这些代码只能获取array1数组的总和,而无法对array2数据进行求和) var array1 = new Array(1,4,9, ...
- 洛谷八连测R4
1.逃避 https://www.luogu.org/problemnew/show/T14561 注意: 1.输入时需要用EOF判断,否则会TLE. 2.用flag判断字符是不是每一句首字母. 3. ...