您的位置:首页 > 移动开发 > Unity3D

Unity 学习笔记——转自努力的小程序员 总结的很不错,学习了

2013-12-11 21:33 501 查看
1.动画倒放 animation.speed *= -1.0; Animation.PlayQuened()方法可连续播放不同动画组

2.寻找场景中物体var door = GameObject.Find("door").transform;

3.全局变量用法,A.js 里的 static var AAA 到 B.js 里调用方式为 A.AAA

4.function Awake() 创建一个物体时自动运行的程序

5.js 中可以使用 "" +  0 将数字转换为字符串

6.3d字体较为模糊是因为使用了anti-aliasing,可以创建大的字体物体,将字体属性中的 size 设为小一些来解决

7.InvokeRepeating(函数名, 开始执行函数的时间, 调用函数的间隔时间);和 Update() 差不多但可以间隔着时间执行

8.Quaternion.Slerp(起点,目标点,期间耗费时间),另外四元数的前三位数代表坐标旋转,最后一位代表坐标位置

9.解决轴心问题,用物体绑定到 Empty GameObject 之下

10.隐藏鼠标 Screen.showCursor = false;

11.FixedUpdate()以指定频率被调用。

可以在 Edit -> project settings -> Time -> Fixed Timestep 中设定该频率。

12.计算圆半径 wheel.tireGraphic.renderer.bounds.size.y / 2;

13.显示载入关卡的进度条

如果想在播放器中显示下载进度,可以通过GetStreamProgressForLevel()函数来读取进

度。

14.用灯光中的 cookie 选项可以模拟移动的云的阴影

15.模拟爆炸伤害

1)

使用 Component->Particle->World Particle Collider 添加一个粒子碰撞物体

如果 Send Collision Message 被启用, 任何发生碰撞的粒子都会发送一个

OnParticleCollision()到粒子系统附加的物体和与粒子发生碰撞的物体上。

2)

调用 OnDrawGizmosSelected () 或者 OnDrawGizmos() 函数

16.
17.
18.容器菜单里的选项随着导入工程而变化

19.把物体直接层级面板拖动到工程面板就是Prefab了

20.

@script AddComponentMenu("Universol Conraller/Cube Controller") //把容器添加进菜单栏

@script RequireComponent(Llight)  在物体中加入某个容器

21.Camera.main可以得到相机

22.Collider 必须搭配 Rigidbody 来使用,就像 Rigidbody 必须搭配 GameObject 一样

23.RigidBody 中的 IsKinematic 勾选后就不受物理控制了,没有重力了,但加了碰撞的Rigidbody物体还是会接收碰撞,但只能该物体碰撞它物体,如果受到它物体的碰撞不会发生反应,但触发器能接收信号,一般 IsKinematic 物体在完全受用户控制而不受其他物体影响时使用

宜于勾选的物体

赛车、子弹、人物、地形等

不宜勾选的物体

可被撞倒的路边垃圾桶、足球等

RigidBody 中的 Continuous/Continuous Dynamic 可以让运动物体碰撞静止物体时产生触碰信号

RigidBody 中的 sleepVelocity 可以忽略最小的运动来停止

24.Reset() 替换,用于设置物体的默认值也可以用

25.几个物体只要一个激活了其他就不能被调用的情况可以用设置 Static 物体来处理

26.iphone的常亮:iPhoneSettings.screenCanDarken = false;

27.

Good organization is important if you want your workflow to be smooth and hassle

free.

Use instantiated Prefabs wherever possible.

Try organizing by function instead of type.

Use Empty GameObjects as containers.

28.音效来源Apple's own Garage Band, Logic Studio 8 and Soundtrack / Soundtrack Pro software

29.CollisionFlags 可判断出碰撞物体的方向

30.Camera 容器的 Depth 参数可以调整几个摄像机的层级关系

31.为什么这里要用 SendMessage();playerLink.GetComponent(ThirdPersonController).SendMessage("HidePlayer");

32.LOD(Level-of-detail 编辑器)

33.QualitySettings.currentLevel = QualityLevel.Fastest;

34.ctrl + shift + n 新建 Empty GameObject

35.BeginGroup + EndGroup 可以创建一个类似 window 的区域,同时进行移动操作

36.导入文件时勾选 Generate Colliders 选项会自动为物体加入 MeshCollider 碰撞体

37.如何查看场景是否已经完成预加载,显示进度条功能
另外WWW.Progress 可以检测下载进度(0~1)

EditorUtility.DisplayProgressBar 可以显示进度条

38.Unity 下载 OGG 音乐
39.Unity API 坏了,搜索 API 时看似搜到了结果,但一条结果都未显示

上网下载 index.js覆盖原有的 index.js

40.各种常用数学函数

Mathf.CeilToInt: 根据小数取整,如果该数不是整数,就一个正的小数让他变成整数

Mathf.FloorCeilToInt: 根据小数取整,如果该数不是整数,就一个正的小数让他变成整数

Mathf.RoundToInt: 根据小数取整数,四舍六入,如果小数是 0.5,则根据当前整数位取偶数整数

41.判断是否下载完毕

使用 myWWW.isDone 或者 myWWW.progress == 1f  来判断

尤其注意判断条件要写在 OnGUI() 里,不能写在 Update() 里,否则判断结果会有误差

42.如何在多个脚本中控制每个 Start 函数调用的先后顺序

在一个主 Start() 函数中依次调用各个脚本的初始化函数

使用全局静态变量,当前一个脚本中的相应初始化函数模块初始化完毕后,改变全局静态变量值来通知下一个脚本开始初始化。

43.自定义函数继承 Transform 或 GameObject 的方法

严格的来说是不行的,一般只能使用将自定义类作为 Component 绑定到物体上的方法,该物体可以是新建的 GameObject 或者克隆出的物体皆可

44.用 VS2010 打开项目文件失败,如下提示:

Couldn't call method SyncVisualStudioProject because the class SyncVS couldn't be found.

UnityEditor.DockArea:OnGUI()

解决方法:在 Unity 中,改变项目中的该脚本的位置(拖至其他文件夹下或最顶层),不要放在文件夹里打开,此时即可用 VS 打开,然后如果再拖回先前的文件夹后,也依然能打开

45.GUI 图片按中心进行旋转或缩放

RotateAroundPivot(float angle, Vector2 pivotPoint)

ScaleAroundPivot(Vector2 scale, Vector2 pivotPoint)

46.if 语句尽量使用大括号,否则容易出现让人摸不着头脑的错误

比如:

if(false)

    Debug.Log("AAA");

else

    Debug.Log("BBB");

print("CCC");

由于Debug最终不输出,结果就被编译成了

 if(false) {

    else{

        print("CCC");

    }

}

47. 查看自身能否看着目标物体(目标物体是否在背后)

Vector3 dir = (target.position - transform.position).normalized;

float direction = Vector3.Dot(dir, transform.forward);

48.如何建立不受父亲物体影响的位置移动

Transform.TransformDirection(Vector3 direction)

Transform.Translate(Vector3 direction, Space.World)

49.通过脚本控制物体的几种方法

1) 通过 GameObject.Find("物体名字") 保存该物体,然后就可随意对其控制了

2) 脚本中设置 public transform 物体,脚本给其他物体后,在外部把相应物体拖入

3) 直接给该物体,脚本中直接使用 transform 来控制

50.参照某一点缩放整个 GUI 的方法

GUIUtility.ScaleAroundPivot (Vector2 scale, Vector2 pivotPoint);

51.截屏的方法

        Texture2D tex;              //截图生成的图片

        //最终获取图像大小

        tex = new Texture2D((int)texMax.z, (int)texMax.w, TextureFormat.RGB24, false);

        //截取屏幕的区域

        tex.ReadPixels(new Rect(texMax.x, texMax.y, texMax.z, texMax.w), 0, 0);

        //接受大小修改

        tex.Apply();

52.动态缩小图片的方式

GUI.DrawTexture(new Rect(shotPngX, camRect.y, shotPngWidth, camRect.height), tex, ScaleMode.StretchToFill, true);

53.计算匀速数字变化

height = Mathf.Lerp(height, 10f, flightSpeed * Time.deltaTime / (10f - height));

54.如何锁定轴向运动

Component >> Physics >> Configurable Joint

55.在视图中按下 Ctrl + F,可以快速输入要查找的物体名字来定位物体

56.如何显示局部 GUI 界面

通过 GUI.Window() 作为窗口物体

57.相机剔除,也就是选择相机所看到的层

camera.cullingMask = 1 << LayerMask.NameToLayer("LayerName");

或者camera.cullingMask = Mathf.Pow(2, LayerMask.NameToLayer("LayerName"))

前一种效率更高,后一种让代码更易读

想添加多个剔除的话可以用

…………

58.鼠标经过按钮提示文字标签功能

59.焦点改变事件

注:Button不能记录 Focus 事件,需要手动记录

例如:

if(GUI.Button(ApplyRect, "OK"))

{

        curFocus = "OK";

}

60.选择打开项目

双击图标马上按下 Alt 键,即出现项目选择窗口

61.如何自定义Webplayer载入Logo及进度条?

<param name="logoimage" value="Logo文件名" />,<param name="progressbarimage" value="进度条名"  />,<param name="progressframeimage" value="进度条外框名" />.

62.Bake参数显示灰色,不能进行任何设置的问题

由于编辑时点选了右侧"Generate Beaset Setting file"菜单栏的选项

这是为高级用户提供的编辑方式,使其可通过更改"BeasetSettings.xml"文件内容来配置烘焙参数

当然也可以删除"BeasetSettings.xml"文件来恢复原来界面

63.在Assets中新建一个文件夹"WebPlayerTemplates",其中的资源会用作Unity网页版发布

64.什么是像素渲染

阴影、法线贴图、灯光遮罩、高精度高光等

65.

通过相机与物体的距离求相机高度

height = 2 * distance * Mathf.Tan(camera.fieldOfView * .5f * Mathf.Deg2Rad);

通过高度和距离得到视野角度
66.

通过视椎体高度、距离求相机角度
通过相机角度、距离求视椎体高度
67.相机长宽比

camera.aspect

68.通过压缩相机下部显示,使相机斜切
相机斜切规律

定义相机斜切角度为A,当A<0(向左或向下斜切,图像向右或向上偏移),当A>0(向右或向上斜切,图像向左或向下偏移)

69.替换 Unity Logo 登录界面

File -> Build Settings… -> Player Settings -> Splash Image

70.如何防止休眠
Screen.sleepTimeout = 0;

71.如何实现振动效果

Handheld.Vibrate

Unity的Bug

Unity3.5 的 "Partical System" 组件添加完后,右侧 Inspector 中已经存在了 "Particle Renderer",但是用户还能够使用菜单选项 "Component/Effects/Legacy Particles/Particle Renderer" 继续添加一遍该组件

插件

1.GUI 的插件:NGUI、IGUI、UIToolKit

2.地形插件:TerrainToolkit

模型类型

FBX, dae, 3DS, dxf, obj

图片类型

PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF

音频视频

PICT, MP3, AIFF, WAV, OGG, MOV, MPG, MPE

平台支持

PC, Mac, Flash Player11, Wii, Xbox360, PS3, IOS, Adroid

3.建议的元素配置

三角面在25万以下/低配机尽量不要使用像素渲染/同样材质尽量合并

4.使 Unity3D 程序运行效率降低的因素

三角面数过多/程序算法过于复杂/灯光阴影计算方式参数过高/物理碰撞体计算量过大
http://hi.baidu.com/jijingmeihua/item/1c86d1cc7e73f72a46d5c026
MadeByLuckyDog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息