2013-01-21 14:53:57 jeksonal 阅读数 17027
  • Unity 值得看的500+ 技术内容列表

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

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


2014-11-12 21:00:42 book_longssl 阅读数 3061
  • Unity 值得看的500+ 技术内容列表

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


从相机到给定距离的视锥体大小

从相机到一定距离的视锥体横截面在世界空间中定义为一个矩形,将可视区域框在内。有时,这对计算给定距离下该矩形的大小、或找出给定矩形大小时的距离比较有用。例如,如果一台移动的相机需要始终完整拍摄到一个对象(如玩家),就不能靠得太近,否则物体的一部分拍不到。

在给定距离的视锥体高度(两者的单位都为世界单位)可通过下列公式得到:-

var frustumHeight = 2.0 * distance * Mathf.Tan(camera.fieldOfView * 0.5 * Mathf.Deg2Rad);

……该过程可颠倒,计算出获得指定视锥体高度的所需距离:-

var distance = frustumHeight * 0.5 / Mathf.Tan(camera.fieldOfView * 0.5 * Mathf.Deg2Rad);

已知高度和距离,计算 FOV 角度也是可行的:-

var camera.fieldOfView = 2 * Mathf.Atan(frustumHeight * 0.5 / distance) * Mathf.Rad2Deg;

每个计算式都包含视锥体高度,而这个值可通过宽度轻易获得(反之亦然):-


var frustumWidth = frustumHeight * camera.aspect;
var frustumHeight = frustumWidth / camera.aspect;


2018-06-04 23:27:48 loongkingwhat 阅读数 677
  • Unity 值得看的500+ 技术内容列表

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

Unity 3D脚本使用系列: Transform基本类

transform是每一个GameObject必须拥有的一个组件,用来管理所在GameObject对象的坐标位置、旋转角度和大小缩放。

目录

1. transform类的实例属性

1.1 eularAngles属性:欧拉角

  • 在(Unity 3D)U3D中使用四元数Quaternion来存储和表示GameObject的旋转角度。
  • 只能对transform.eularAngles进行整体赋值,例如transform.eularAngles = new Vector(1.0f,2.0f,3.0f),不可以对transform.eularAngles的单独分量进行赋值,例如transform.eularAngles.x = 1.0f是不可以的。
  • transform.eularAngles进行赋值或者获取的的时候,值都是相对世界坐标系而言的,若需要是相对父物体进行的角度变换则需要使用属性localEularAngles来设置。
  • transform.eularAngles使用顺规z-x-y,即transform.eularAngles = new Vector3(10.0f, 20.0f, 30.0f),则GameObject对象会沿着z轴先旋转30°,再沿着x轴旋转10°,最后再沿着y轴旋转20°。

1.2 hasChanged属性:transform组件是否被修改

此属性用于判断GameObject对象从上次将此属性设置为false以来,其transform组件的属性是否发生了变化。

1.3 localPosition属性:局部坐标系位置

此属性用于设置或返回GameObject对象在局部坐标系中的位置,若无父级对象则和属性Transform.position返回值一样。
要想完全了解localPosition,那么需要把localposition和position、localScale放在一起讨论。

  • 情形一
Cube World Position Local Position Local Scale
Cube0 (1.0f,0.5f,-0.5f) (1.0f,0.5f,-0.5f) (1.0f,1.0f,1.0f)
Cube1 (5.0f,1.8f,2.5f) (4.0f,1.3f,3.0f) (1.0f,1.0f,1.0f)
Cube2 (10.0f,15.0f,20.6f) (5.0f,13.2f,18.1f) (1.0,1.0,1.0)

解释:通过相对位移的关系不难看出他们之间的关系。具体的测试代码可以在我个人GitHub中查看。

  • 情形二
Cube World Position Local Position Local Scale
Cube0 (1.0f,0.5f,-0.5f) (1.0f,0.5f,-0.5f) (1.0f,2.0f,1.0f)
Cube1 (5.0f,3.1f,2.5f) (4.0f,1.3f,3.0f) (1.0f,1.0f,1.0f)
Cube2 (10.0f,29.5f,20.6f) (5.0f,13.2f,18.1f) (1.0,1.0,1.0)

解释:情形二中由于父节点Cube0的LocalScale的变化导致其子孙节点的World Position发生变化。发生变化的具体计算方式是:

当子节点的Local Position为(son_x, son_y, son_z),父节点的LocalScale为(dad_x,dad_y,dad_z),父节点的World Position为(dad_positionx,dad_positiony,dad_positionz).

子节点的World Position为(son_x*dad_x+dad_positionx,son_y*dad_y+dad_positiony,son_z*dad_z+dad_positionz)

  • 情形三
Cube World Position Local Position Local Scale
Cube0 (1.0f,0.5f,-0.5f) (1.0f,0.5f,-0.5f) (1.0f,2.0f,1.0f)
Cube1 (5.0f,3.1f,2.5f) (4.0f,1.3f,3.0f) (1.0f,2.0f,1.0f)
Cube2 (10.0f,55.9f,20.6f) (5.0f,13.2f,18.1f) (1.0,1.0,1.0)

解释:Cube0是Cube1的父节点,Cube1是Cube2的父节点。通过情形三的实验,发现Local Scale造成的影响具有累计效应。

1.3 parent属性:父物体Transform实例

此属性用于返回父物体的Transform实例。transform.parent只能返回夫以及对象的Transform,若要返回父物体的父物体,可以使用transform.parent.parent,更多级父物体依此类推。若父物体不存在,则返回null。如果想返回transform中最顶层的父物体,可以使用transform.root。

1.4 Matrix属性:转换矩阵

转换矩阵分为两个部分,从世界坐标系到自身坐标系的转换,以及从自身坐标系到世界坐标系的转换。暂时涉及的项目还没有该属性的使用需求,不做深入学习。

2. Transform实例方法

2.1 Rotate方法:绕轴旋转旋转

2.1.1 绕坐标轴旋转

此方法的功能是是的transform实例在relativeTo的坐标系中旋转欧拉角eularAngles。

//基本语法
public void Rotate(Vector3 eularAngles);
public void Rotate(Vector3 eularAngles, Space relativeTo);
public void Rotate(float xAngle, float yAngle, float zAngle);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo);

解释:其中参数eularAngles为transform要旋转的欧拉角,可以是以Vector3的形式给出,也可以分别给出三个角度值。参数relativeTo为transform旋转时候参考的坐标系,如果不特殊说明,默认为Space.Self。

对立方体cubea进行操作,分别按照以自身坐标系为参照系、以世界坐标系为参照系、默认参照系。首先通过给transform.eulerAngles直接赋值,将自身坐标系绕x轴做一旋转。然后使用Rotate函数进行旋转。

        cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
        Debug.Log("Space.Self1:" + cubec.transform.eulerAngles);
        cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f), Space.Self);
        Debug.Log("Space.Self2:" + cubec.transform.eulerAngles);

        cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
        cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f), Space.World);
        Debug.Log("Space.World:" + cubec.transform.eulerAngles);

        cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
        cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f));
        Debug.Log("默认坐标系:" + cubec.transform.eulerAngles);

经过上述代码可以获得如下的结果:
这里写图片描述

2.1.2 绕某个向量旋转

此方法是使得GameObject对象在relativeTo坐标系中绕轴向量axis旋转angle度。如果想使GameObject对象实例绕着某个物体旋转,则需要使用Transform.RotateAround(point:Vector3, axis: Vector3, angle:float).

//基本语法
public void Rotate(Vector3 axis, float angle);
public void Rotate(Vector3 axis, float angle, Space relativeTo)

其中axis为旋转轴方向,参数angle为旋转角度,参数relativeTo为参考坐标系,默认为Space.Self。

2.2 RotateAround方法:绕轴点旋转

此方法的功能是是的GameObject对象绕着point点的axis方向旋转angle度。

//基本语法
public void RotateAround(Vector3 axis, float angle);
public void RotateAround(Vector3 point,Vector3 axis,float angle)

其中,参数point为参考坐标系,参数axis为旋转轴方向,参数angle为旋转角度。

2.3 旋转方式总结

旋转实现的方式:

  • transform.Rotate()
  • transform.RotateAround()
  • transform.rotation = Quaternion.Eular(x,y,z)
  • transform.localRotation = Quaternion.Euler(x,y,z)
  • transform.eularAngles = new Vector3(x,y,z)
  • transform.localEulerAngles = new Vector(x,y,z)

前两种是通过transform的实例方法来实现的,在2.1和2.2中已经进行了阐述。
下面分别讲述剩余4种
transform.rotation = Quaternion.Eular(x,y,z)
效果:代表了物体的旋转,不能直接为transform.rotation赋值。可以使用各种Quaternion的方法。
transform.eularAngles = new Vector3(x,y,z)
效果:与Quaternion.enlerAngles基本相同,用来设定物体的旋转角度,但不要分别设置xyz,要整体赋值。

注意以下三种方式最后得到的结果都是一样的,只是在赋值的方式上有差异。(以上两种方式都不涉及到本地坐标系的问题)

GameObject Cube;
Cube.transform.Rotate(a,b,c); //1
Cube.transform.Rotate(new Vector3(a,b,c)); //1.1
Cube.transform.rotation = Quaternion.Eular(a,b,c); //2
Cube.transform.eularAngles = new Vector3(a,b,c) //3

transform.localRotation = Quaternion.Euler(x,y,z)
效果:在父物体的坐标系下的旋转变换

transform.localEulerAngles = new Vector(x,y,z)
效果:在父物体的坐标系下的旋转欧拉角

// 1
cube2.transform.localEulerAngles = new Vector3(0.0f, 50.0f, 0.0f);
// 2
cube2.transform.localRotation = Quaternion.Euler(0.0f, 50.0f, 0.0f);
//2种方法获得的结果相同

2.4 Translate方法:相对坐标系移动

此方法的功能是是的GameObject对象在relativeTo的坐标系空间中移动参数translation指定的向量。

//基本语法
public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Space relativeTo);
public void Translate(float x, float y, float z);
public void translate(float x, float y, float z, Space relativeTo);

可以看出:赋值当中,要么通过float或者通过Vector3进行角度赋值,选择relativeTo或者选择默认。

2014-11-18 13:53:54 driaven 阅读数 3722
  • Unity 值得看的500+ 技术内容列表

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

        Unity3D学习
     我们来学习风的设置首先不知一个地形场景,还是先单击Assets(资源)倒入Terrian  Creator(地形)包在然后场景里面种上树。

   
    
单击层次栏中的Wind Zone,属性栏中就会出现他的属性,我们可以设置风的大小。运行就出来效果了,



Mode中
{
Directional:全景风
Spherical:局部风(可以设置到主人公身边)                            

}

相关学习请到http://www.gopedu.com/
2013-12-19 10:52:04 xuanjian6 阅读数 5728
  • Unity 值得看的500+ 技术内容列表

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

有时文本框中的文字过多会超出文本框的显示范围,影响显示效果。曾经尝试改变字体大小,倒是差强人意。但是,跟整体的风格就不一致了!百度了一下没有找到结果,还是google给力,一个链接就搞定了!

Unity3d本身就已经为我们考虑到了这个问题,并且提供了两种解决方案。http://docs.unity3d.com/Documentation/ScriptReference/GUIStyle-clipping.html


使用GUIStyle定义文字样式,其中,提供了Overflow和Text Clipping两种方法来处理文字过长的情况。

Overflow:当文字过长时,文字会在文本框外浮动。

Text Clipping:当文字过长时,系统会根据设置的TextClipping的值对文字进行裁剪,使其只显示固定数量的字符。当然可以用鼠标滑动来显示其他的字符,但是每一时刻文本框 中都只显示固定数量的字符。

unity3d UI设置

阅读数 87

Unity3D学习之光源

阅读数 301

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