找回密码
 立即注册
查看: 4166|回复: 60

[学术/精华文章] Unity3d之脚本、组建、GUI等使用总结

[复制链接]
发表于 2012-11-28 09:14 | 显示全部楼层 |阅读模式
脚本方面 ,官方脚本分:
Runtime Classes : 游戏中使用的脚本,可以操作游戏中所有的GameObject,Components,
Attributes: 脚本里的用的, 在js代码中以@开头...可以操作脚本中的变量,脚本执行时机,
Enumerations: 脚本中枚举参数的定义.
Editor classes :  Unity工具修改的脚本.可以给Editor开发插件.也可以修改Unity里的各个视图显示的信息.
Enumerations : Editor classes里头枚举参数的定义.

官方脚本的说明很详细,还附有代码,多是javaScript.
[ Debug ] 调式类:
Debug.Log(" 在控制台的输出 "); 这个语句可以很方便的在控制台里显示信息.控制在在Unity3d软件的下面状态条的地方.在菜单中开启的选项.此代码可以写在任何的方法体内.
Debug.Break() ; 使脚本运行停下来,然后点击运行键可以一帧一帧的执行,但是不可以单步执行.
[ Input ] 输入类:
一个输入类: 通过次类可以获得鼠标的位置,按键的事件, 如果是iphone上,还可以获得当前几个点触摸,跟触摸的位置.此代码要写在Update()方法体内.
if( Input.GetKey("A") ) {} 当按下a键时响应..
Input.mousePosition 获得鼠标当前位置 返回类型Vector2 .. 坐标为屏幕左下角 0,0 点 .
官方有多个Demo ,都有此功能. 而且其中一个代码有iphone 模拟摇竿的代码 joystate .
可以自行封装 pc mac iphone平台的按键输入. 会用到 Application 类的isEditor方法. 此方法返回运行的程序是否在Unity3d软件下.

组件方面:
Unity中 碰撞检测的发起者有: CharacterController 与 RigodBody .
能接收到碰撞的有: 所有的Collider ..同时包括CharacterController ,RigodBody..
CharacterController(CC) : 为胶囊状碰状外型. 在运动中会与碰撞发起者,碰撞接收者.发生碰撞,并始终保持与他们分离状态.比如 CC 能站在 mash 的地面上.会撞到BoxCollider上,不能穿越.
通过脚本 character.Move(Vector3)可以修改其所在GameObject的世界位置.此处不能用transform 否则CC会进入其他物体内..
在没有脚本处理下落时,CC 不会下落,还句话说,默认时CC不具备物理特性..
RigodBody (RB) : 为Components 可以与CC 同时为于一个GameObject中. 他使GameObject具有物理的特性.比如下落的重力,比如收外力被击飞...能把其他物体挤跑.等等. 与其碰撞的物体会被调用其下的脚本OnCollisionEnter()脚本.
碰撞接收者 : 当 与发起者碰撞时,会发生反映,并触发其下脚本.当接收者为Trigger时,发生碰撞时,会只发生脚本调用OnTriggerEnter()..不会有真实的物理放映.
所以当你决定用Unity处理复杂碰撞时,需要最开始就定义好,游戏中各个物体的碰撞模型.否则可能会出现冲突.比如2个物体有放映不触发脚本,或是不该相互放映的时候发生反映了。

在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。
1. 发起碰撞物体有:Rigodbody , CharacterController .
2. 接收碰撞物体由:所有的Collider .
工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。
比如:墙用BoxCollider ,所以墙与墙之间无反应。
比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。
比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。
就是此原因。
在所有Collider上有一个Is Trigger 的boolean型参数。
当发生碰撞反应的时候,会先检查此属性。
当激活此选项时,会调用碰撞双方的脚本 OnTrigger***, 反之,脚本方面没有任何反应。
当激活此选项时,不会发生后续物理的反应。反之,发生后续的物理反应。
总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。
在Rigodbody 上有一个Use Gravity 的boolean型参数.
Unity 物理引擎,处理的一个细节:
当一个CharacterController不发生位置变化,一个Collier发生位置变化后,产生碰撞。将不会调用任何碰撞反映。
物理引擎视为CharacterController无碰撞.

GUI
在3d游戏中 可以用脚本OnGUI() 画2D的前景贴图。比如按钮,血条。等等。
步骤:
新建空GameObject.
加入空脚本
脚本中加入OnGUI():每帧都回调用 Update():每帧都会调用。
OnGUI()里使用GUI.DrawTexture等方法画贴图。
注 :
Unity里默认Resources文件夹为2d资源存放的地方。把2d图片放到里头。
创建图片的方法:
private var img : Texture2D ;
img = Resources.Load( "cmd.png" , typeof(Texture2D) );

原文链接:http://blog.sina.com.cn/s/blog_9655544601016wzy.html

发表于 2017-4-24 16:13 | 显示全部楼层
楼主是超人
发表于 2017-4-24 15:26 | 显示全部楼层
真心顶
发表于 2017-4-24 16:04 | 显示全部楼层
说的非常好
发表于 2017-4-24 15:54 | 显示全部楼层
很好哦
发表于 2017-4-24 15:44 | 显示全部楼层
不错不错
发表于 2017-5-5 17:44 | 显示全部楼层
很不错
发表于 2017-5-5 18:01 | 显示全部楼层
楼主是超人
发表于 2017-5-5 17:29 | 显示全部楼层
说的非常好
发表于 2017-5-5 17:22 | 显示全部楼层
很好哦
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-6 21:18 , Processed in 0.133650 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表