1.面数控制
在MAX软件中制作单一Game Object物体的面数不能超过65000个三角形,即32500个多边形Poly,如果超过这个数量的物体不会显示出来,这就需要我们合理分布多边形和模型数量。打开MAX场景,选择
File/Properties/Summary Info可以打开文件属性记录。其中Faces可以看到每个物体的实际数量,模型面数要少,个体数量不能超过65000个Faces面。
有特殊效果的模型需要单独制作,物体命名要统一
(SanLou_YanHuiTing_JingZi或者SanlouYanhuitingJingzi),但不能出现重复,否则整合模型会被覆盖,给后期工作造成不必要的麻烦。
2.建模控制
Unity3D软件支持Line渲染和编辑之后所产生的模型。大部分模型都依靠Polygon进行制作。在模型表面可以承认多出四边形的面,但不渲染交错的面。默认情况下,U3D引擎是不承认双面材质的,除非使用植物材质球
Nature类型。所以在制作窗户、护栏等物体,如果想在两面都能看到模型,那需要制作出厚度,或者复制两个面翻转其中一个的Normal法线。
3.文件的放置
模型可以继承MAX的材质,但是文件的设置要按照以下形式进行放在项目的Assets文件夹内,新创建一个Object文件夹。并在其中创建Materials和Texture文件夹(分别自动存放材质球和贴图)。模型物体并列保存在Object文件夹内。这个规律模式不要打乱,否则会破坏整个系统逻辑。
4.材质数量控制
物体材质要赋予默认的标准材质standard,特殊材质需要特殊调节(玻璃,镜面等),透明材质需要给双面。如果一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有任何的限制。
如果一个物体给与多个材质球,我们需要用Multi/SubObject来实现,但是这种罗列的材质球的数量没有严格的控制,但尽量保持在10以内,过多的数量会导致一些错误。
如果不使用Multi/SubObject材质球,也可以选择一些面,然后给与一个材质球。这样系统会自动将其转换成Multi/SubObject材质。
综合而言Unity3D软件对于材质的兼容还是很好的。
5.物体的质感
Diffuse、Diffuse Bumped、Bumped Specular,这三种类型为常用类型,其中Bumped需要增加Normal法线贴图来实现凹凸。
Decal
这种材质为贴花材质,即相当于Mask类型,可以再Decal(RGBA)贴与一个带有Alpha通道的图像,形成和原图像相叠加的效果。
Diffuse Detail
这种材质可以创造出污迹和划痕的效果,即相当于Blend混合材质。
Reflective
其中各种类型可以创造出金属反射效果,需要增加Cubmap贴图。
Transparent
其中各种类型可以创造出透明的效果,需要增加具有Alpha的通道贴图。
注意:如果要做玻璃贴图,Alpha如果全是灰色或黑色(即要求全透明),那么Alpha就会失效,如果要全透明,材质Alpha其中必须至少有1像素为白色。
Nature
其中Soft Occlusion Leaves类型主要应用于片状的树叶材质。
6.关于复制
场景中的灯光布局,重复的模型物体都可以使用系统Prefab进行关联复制,这样可以改变一个参数的同时将所有关联物体属性改变。
7.山脉控制
在创建山脉之后,选择Terrain/Set Resolution可以设置山脉的大小和属性。
需要注意的是,默认情况下Terrain Width和Terrain Height为1000米。如果设置这个数值太小,那么绘制草的时候会产生偏移,因为草的尺寸必须减少到0.1的单位。
也就是说,山脉在处理0.1单位的时候会产生0.01的偏差,如果模型太小,这种偏差是显而易见的,所以建议用户不要让模型过小。
8.光晕控制
光晕又称为Lens Flare即灯光光效。可以选择一个GameObject物体给与Component/Rendering/Lens Flare,并在Flare中增加一个Standard
Assets/Light Flares/50mm Zoom项目。这样在运行之后就会产生光晕。但有时候如果光晕太远太高却看不到。一种办法是将光晕离近,另一种办法是将所有摄影机Camera的Far clip plane的数值增加。
9.摄影机控制
如果场景中有多架摄影机,那么如何确定第一打开时间所显示的摄影机,就需要设置Camera属性中的Depth数值,数值越大的摄影机越优先显示。
Unity3D——飞机大战项目总结
学飞机大战好几天了,今天就总结一下飞机大战所学的知识,所遇到的困难,还有常出现在错误。
一:资源包的导入,场景的搭建步骤不在阐述在这包的导入和创建新文件夹在回顾一下Scences存放场景视图,Scripts存放脚本,Resources存放资源包,资源包下有Textures存放图片,Materials存放材质,Audios存放声音,Madels存放模型。
二:脚本的建立
(1)玩家的飞机的前后左右的移动代码如下:
float x = Input.GetAxis ("Horizontal");//左右移动 float z = Input.GetAxis ("Vertical");//前后移动 transform.Translate (-x,0,-z);
(2)子弹的不停发射我们采用了鼠标事件用if判断代码如下:
if (Input.GetMouseButtonDown(0)||Input .GetKey(KeyCode.Space))
//鼠标左键或空格发射子弹
(3)子弹的个数我们用克隆的方法代码如下:
GameObject u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;//Instantiate有三个参数一个是所克隆的对象,第二个是所克隆的位置,第三个是位置。
(4)在克隆出子弹时,子弹是静止不动的,我们在给它加个力,有于我这个脚本是挂在子弹预设体上的代码如下:
u.rigidbody.AddForce(0,0,-8000);//有三个参数,一个是X轴的力,一个是Y轴的力,一个是Z轴的力。
(5)敌机的飞行就按傻瓜的来所代码如下:
transform.Translate (new Vector3(0,0,-1));//有三个参数,一个是X轴的飞行,一个是Y轴的飞行,一个是Z轴的飞行。
(6)敌机的子弹发射也是傻瓜类型代码如下:
float rocketTime=1;//给敌机所发射的时间
rocketTime -= Time.deltaTime;//时间递减 if(rocketTime<=0){//如果时间小于零为真 rocketTime=1; GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;
aa.rigidbody.AddForce(0,0,8000);//给敌机子弹加力
(7)子弹的销毁,脚本添加给玩家子弹的预设体上代码如下:
Destroy (this.gameObject,2);//俩个参数一个是销毁目标,而是几秒后所消失
(8)敌机子弹的消失,脚本添加给敌机脚本代码如下:
Destroy (this.gameObject,2);
(9)玩家子弹打到敌机时,敌机消失代码如下
void OnTriggerEnter(Collider aa){//添加触发器
if (aa.tag=="PlayRocket") {//如果玩家的子弹碰到标签为PlayRocket则为真 //Debug.Log(collision.gameObject.name);
}else if (transform.transform.position.z>=227){//当敌机飞出电脑屏幕敌机自动 } } Destroy (this.gameObject); 销毁 (10)当敌机子弹打到玩家飞机时则玩家飞机生命减少,若干次销毁代码如下; void OnTriggerEnter(Collider aa){ } if (aa.tag=="EnenmyRocket") {//打到一次 } i--;//生命建少一次 if(i==0){//当减为零时为真 Destroy (this.gameObject);}//销毁目标
具体代码如下:
玩家飞机代码public class PlayerPlan : MonoBehaviour {
public GameObject yushe; int i=2; // Use this for initialization void Start () { } // Update is called once per frame void Update () { float x = Input.GetAxis ("Horizontal"); float z = Input.GetAxis ("Vertical"); transform.Translate (-x,0,-z); if (Input.GetMouseButtonDown(0)||Input .GetKey(KeyCode.Space)){ GameObject
u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;
} void OnTriggerEnter(Collider aa){ } if (aa.tag=="EnenmyRocket") { } i--; if(i==0){ Destroy (this.gameObject);} } u.rigidbody.AddForce(0,0,-8000);
玩家子弹代码如下:
using UnityEngine;
using System.Collections;
public class PlayRicket : MonoBehaviour {
}
敌机子弹代码:
using UnityEngine;
using System.Collections;
public class EnProRock2 : MonoBehaviour {
public GameObject EnPeoRo2; float rocketTime=1; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } //this.gameObject.rigidbody.AddForce(Vector3.back); Destroy (this.gameObject,2); // Use this for initialization void Start () { } // Update is called once per frame void Update () { rocketTime -= Time.deltaTime; if(rocketTime<=0){ rocketTime=1; GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;
} } aa.rigidbody.AddForce(0,0,8000);
}
敌机代码如下:
using UnityEngine;
using System.Collections;
public class EnenmyPeople2 : MonoBehaviour {
}
if (aa.tag=="PlayRocket") { } } // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter(Collider aa){ transform.Translate (new Vector3(0,0,-1)); //Debug.Log(collision.gameObject.name); Destroy (this.gameObject); }else if (transform.transform.position.z>=227){ Destroy (this.gameObject);//想了解更多到狗刨学习网
Android总结第一步Android1在Windows下搭建Android开发环境以及HelloWorld程序搭建Android…
一android四大组件ActivityServiceBroadcastReceiverContentProvider二Activ…
初学Android的总结一对Android的初步认识有以下几方面1Android是什么Android是Google在20xx年11…
Android开发简介Android应用程序的五大基本组件Activity应用表示层基类Activity一个活动表示一个可视化的用…
AndroidContentprovidercontentProvider对外共享数据统一数据访问接口多个项目可以访问1UriUr…
3DMax效果图制作教学设计总结和典型材料一、教学设计总结3DMax效果图制作课程的学习,既是学生通过理论学习和实践活动,逐步掌握…
3DSMAX课程教学总结本学期我担任了高二广告班的3DMAX课程教学工作由于计算机取代手工绘制图样已是必然趋势学生学习中遇到的主要…
3Dmax烘培通过对烘培的学习和对高管局的烘培实验和对烘培问题的解决我对光影烘培有了一定的了解对烘培流程和烘培过程中遇到的一些问题…
3Dmax姓名班级学号学习心得在大四对于3Dmax的课程学习已经结束对于3Dmax有了更加深入地了解学会了一项非常不错的本领本次学…
学习3Dmax的一些心得10电信2班100303080翁志鹏学习3Dmax首先要了解3Dmax是什么3DStudioMax常简称为…
www室内设计(又称建筑设计),室内设计是环境艺术设计的一个分支,与建筑设计有着密切的关系。一座建筑物包含着内、外空间两个基本环境…