unity3d unity如何改变模型透明度莫名转向问题

Unity3D导入3DMax模型缩放单位问题深入分析 - 兜里
作者:切梦刀
热度:52083℃
“Unity3D导入3DMax制作的模型存在100倍缩放比例”,各Unity3D开发者基本都听过吧。
怎么保证3DMax中制作的1m导入Unity3D后还是1m?
为什么会存在100倍缩放问题?
怎么保证3DMax中制作的1m导入Unity3D后还是1m?
3DMax单位设置
按如上单位设置后,每个格子是0.1m的大小。要制作一个1m的模型得占10个格子,如下为一个边长1m的盒子:
通过以上设置后,3DMax里制作的1m导入Unity3D也是1m,继续分析原因
为什么会存在100倍缩放问题?
解释这个问题前,先明白几个概念
3DMax“显示单位”和“系统单位”有什么关系
显示单位:决定3DMax主面板显示时使用的尺寸单位,下面是分别设置为“厘米”和“米”时的情况
数值暂不用关心,看数值后面的单位cm和m,这就是显示单位的设置
系统单位:与“显示单位”一起决定,最终存储时记录的单位值(暂且叫“存储单位”吧)。
存储单位=显示单位/系统单位
做个1m的box:显示单位设置为1m时,系统单位为1m 存储单位为1,系统单位为1cm 存储单位为100
做个1cm的box:显示单位设置为1cm时,系统单位为1cm 存储单位为1,系统单位为0.1mm 存储单位为100
做个1m的box:显示单位设置为1cm时,系统单位为1cm 存储单位为100,系统单位为0.1mm 存储单位为10000
“显示单位”和“系统单位”对Unity3D的导入有何影响?
上面所说“存储单位”最终会记录到模型文件,Unity3D导入时将按“1存储单位=1m”的比例显示模型,举两组数据:
显示单位1m,系统单位1m,存储单位1,Unity3D中显示0.01m
显示单位1m,系统单位1cm,存储单位100,Unity3D中显示1m
不是说“1存储单位=1m”吗,怎么缩小了100倍?
看下Unity3D导入模型的默认设置
缩放因子为0.01,导入Unity3D的模型默认情况下会被缩小100倍。
要使3DMax导出的模型在导入Unity3D时默认1m=1m,关键得让模型中记录的“存储单位”=100。
比如这几种方式都能得到存储单位为100的模型:
显示单位1m,系统单位1cm,制作一个1m的模型
显示单位1cm,系统单位0.1mm,制作一个1cm的模型
显示单位1cm,系统单位1cm,制作一个1m的模型
只要符合以下公式(模型尺寸/显示单位)*(显示单位/系统单位)=100,化简一下为 模型尺寸/系统单位=100
但要达到“3DMax中创建一个1m的模型导入Unity3D也是1m”的要求,那么模型尺寸=1m 已经固定,代入公式得 系统单位=1cm。所以3DMax里系统单位要设置为cm,显示单位怎么设置都无所谓。
要保证“3DMax中创建一个1m的模型导入Unity3D也是1m”,只需要把3DMax中系统单位设置为cm
真不明白为什么Unity3D要把模型导入默认缩放因子设置为0.01。
不过有以上公式这些都不是问题,如果Scale Factor = 1只需要保证模型记录的存储单位为1,即“模型尺寸/系统单位=1”->“1m/系统单位=1”->系统单位=m
敲了这么多感觉有点啰嗦,如果感觉不明白,欢迎回复讨论^_^
转载请注明:
添加新评论
:哇,小游戏!ヾ(????)?"
:用补丁还是注册不了
:用补丁,别用序列号
:注册DreamWeaver CS5产品时常会碰到:
输入序列号->下一...
:祝你生日快乐!
在“zhuce.com”买的,要翻墙
:文中有下载链接
:如何下?
:看到你的网站,好久没有发帖了,终于发帖了,还是在我的生日这天,哈哈
:谢谢,完美解决我的问题!随笔 - 1082, 文章 - 0, 评论 - 0, 引用 - 0
开始学习u3d,记录一些学习的东西,可能很简单。高手勿喷。
在地形中,我放入了一个卡车的模型,通过方向键控制卡车的移动。摄像头跟随卡车的移动。
基本的操作我就不记录了。
1。首先创建地形,添加地形贴图,刷一点草,再种点树。OK。一个简单地形就形成了。
2。卡车是如何控制的?
我们先创建一个cube ,控制一个cube是很简单的,为这个cube添写控制脚本。
var&MoveSpeed=5;
var&RotateSpeed=20;
function&Update () {
if(Input.GetKey(KeyCode.W)){
this.transform.Translate(Vector3.forward*Time.deltaTime*MoveSpeed);
}else&if(Input.GetKey(KeyCode.S)){
this.transform.Translate(Vector3.forward*Time.deltaTime*-MoveSpeed);
}else&if(Input.GetKey(KeyCode.A)){
this.transform.Rotate(Vector3.up*Time.deltaTime*-RotateSpeed);
}else&if(Input.GetKey(KeyCode.D)){
this.transform.Rotate(Vector3.up*Time.deltaTime*RotateSpeed);
代码很简单,就是通过键盘对cube进行移动控制。
现在一个cube可以移动了,如何移动卡车呢?
设置cube的position到(0,0,0),设置卡车的position到(0,0,0)。
注意cube和卡车的z轴方向应该一致。缩放cube和卡车一样大,然后将cube的mesh renderer去掉。这样cube外观就不会渲染出来。在层次面板中移动卡车到cube中。
这样移动cube,卡车就被移动了。
最后别忘记了设置camera跟随cube。19:16 提问
unity3d关于自动寻路和animator动画控制,问题我和代码放一起了,求教,谢谢~~~
navMeshAgent的框自己先跑过去目标position了,但navMeshAgent停止后,动画也停止了,导致模型没走到目标位置(方向是对的) 为什么会这样?求指点,谢谢~~
难道是我设置navMeshAgent.updatePosition=false 但这个必须设置, 动画控制,速度和旋转速度都是动态计算的,代码如下
void Awake()
navAgent =GetComponent();
navAgent.destination= Wayspoint[index].//将巡逻的初始位置赋值,目标位置
navAgent.updatePosition =
navAgent.updateRotation =
print(Mathf.Abs((Wayspoint[0].position - Wayspoint[1].position).magnitude ));
private void EnemyAnimator()
float angle = Vector3.Angle(transform.forward, navAgent.desiredVelocity);
if (angle & 90)//如果没有,来判断机器人与期望速度,之间的夹角,如果大于90度的话只进行转身,不运动,所以在这个只把speed设置为0
anim.SetFloat("speed", 0, StoppingTime, Time.deltaTime);
else//小于90度的时候//即目标方向在机器人朝向上的投影,求得实时移动速度,达到平滑过渡目的;走向过程中呈弧形,并慢慢加速
Vector3 project = Vector3.Project(transform.forward, navAgent.desiredVelocity);//在这里这样写是因为如果让他运动的时候,之间有夹角,直接给他赋值速度,他的期望运动路径不发生变化
anim.SetFloat("speed", project.magnitude, StartingTime, Time.deltaTime);
print("speed" + project.magnitude);
Vector3 crossFaction = Vector3.Cross(transform.forward, navAgent.desiredVelocity);//这里利用的是叉乘运算,来判断转身的方向,y值大于0,y值小于0
if (crossFaction.y & 0)
float angleRed = Mathf.Deg2Rad * //这个是把角度转化为弧度
anim.SetFloat("anglarSpeed", angleRed, StartingTime, Time.deltaTime);//这个是把角度转化为弧度,让机器人进行转身运动
按赞数排序
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之设置自动旋转屏幕默认旋转方向
Unity3D研究院之设置自动旋转屏幕默认旋转方向
围观59371次
编辑日期: 字体:
如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向。
策划的需求是游戏采用横屏,但是要求支持两个方向自动旋转,如下图所示,我的设置是这样的。
Default Orientation* Auto Roation 表示游戏支持自动旋转屏幕,但是前提是手机没有锁定屏幕旋转功能。
Landscape Right 和Landscape Left 表示手机屏幕只支持横屏两个方向的自动旋转。
这里问题就来了,既然设置了两个方向的自动旋转,那么必然会有一个默认的方向。然而Unity默认的方向就是Landscape Left
就是屏幕的正方向在手机Home的左边。大部分IOS游戏都是这个方向,但是在Android上可能就有点问题了,因为Android屏幕的左下角有个返回的按钮,假如你的游戏是横屏,又假如你的游戏操作区域在右下角,那么玩家玩的时候很有可能点到这个返回按钮,那么用户体验就降低了。。
所以策划想让Android版默认正方向让屏幕在Home的右边,但是还必须支持横屏的自动旋转。。可是Unity的面板里根本没有设置带自动旋转,并且设置默认方向的参数。。。我想到在代码里面给它赋值,于是有了下面的代码。似乎问题解决的不完美,因为Unity开机有个启动画面,然而启动画面是在Awake之前执行的,所以虽然在Awake设置了屏幕方向,可是启动画面的方向确还是读取ProjectSetting里的。
123456789101112131415
void Awake() {
//设置屏幕正方向在Home键右边
Screen.orientation = ScreenOrientation.LandscapeRight; }& void Start ()
//设置屏幕自动旋转, 并置支持的方向
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToLandscapeLeft = true;
Screen.autorotateToLandscapeRight = true;
Screen.autorotateToPortrait = false;
Screen.autorotateToPortraitUpsideDown = false; }
所以,我直接在Setting里面就设置默认的正方向屏幕在Home按键的右边。
在Awake或者Start方法里面,在设置成支持横屏旋转,问题就完美解决了。
void Start ()
//设置屏幕自动旋转, 并置支持的方向
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToLandscapeLeft = true;
Screen.autorotateToLandscapeRight = true;
Screen.autorotateToPortrait = false;
Screen.autorotateToPortraitUpsideDown = false; }
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!导入模型的Z轴方向反了,导致动画都是反的,请问该怎么办呢?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,881贴子:
导入模型的Z轴方向反了,导致动画都是反的,请问该怎么办呢?收藏
初学U3D,网上找了模型,导入后用起来,动作都没问题,但是方向是反的。就是:攻击的时候模型会背对着玩家做动作。移动的时候也像是在倒退一样。我看了下就是模型里Z#的方向问题,3DMax不会用,请还有什么办法呢?
SiKi学院上有大量的项目案例课程,可以让学员随时随地学习!通过案例来从入门到深入的学习Unity!
找大神弄一张图片!弄好了我赏钱!
找个空gameobject套着这个,然后调整模型朝向
登录百度帐号

我要回帖

更多关于 max模型导入unity 的文章

 

随机推荐