Unity代码结构

工程结构

工程结构是约束整个unity3d工程的文件存放位置。想想你有一个大型的项目文件柜,而这些文件就好比一堆项目资料,对比一个整理完善、有序存放的文件柜,和一个文件互相交错,存放无序的文件柜,我相信你一定会选择第一个,因为第二个对于你来说就是噩梦般的存在。废话不多说,我先上我得工程目录结构

这里写图片描述

如果你能严格按照这个目录,整个工程就可以从始至终保持这个结构而不凌乱。

Assets    #unity3d 默认主目录。
-----Editor #编辑器类存放文件夹。
-----ExternalLibraries #大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的。
-----GameAssets #游戏美术资源存放地,因为美术童鞋都是单独工程进行编辑,然后导出unitypackage文件,这个文件最大的坏处就是在导入时可能会污染目录结构,导致每次导入文件,均要手动调整目录,而单独命名一个GameAssets目录,再把这个目录复制到美术童鞋的工程里面,让美术童鞋编辑玩资源后,只把需要导出的资源放入这个目录存放妥当,再导出unitypackage文件。
------------|Materials  #材质球。
------------|Models   #模型,如果动画系统采用animation,把动画文件和原始模型存放在同一目录下,如果采用animtor,因为动画重用的关系,动画文件需单独存放。
------------|Animations #用新的Mecanim时,存放动画文件。
------------|Prefabs  #预制体,所有不需要Resource.Load加载的预制体,均存放在此。
------------|Sounds  #声音文件
------------|Textures  #贴图文件
------------|UI     #一些UI文件,如Atlas等。
------Plugins  #dll和一些纯代码插件。
------Resources  #所有需要通过Resource.Load加载的资源都存放于此
------Scenes    #scenes文件存放目录
------Scripts    #代码目录
------StreamingAssets

Unity中的脚本都是继承自MonoBehaviour。

一、基础函数:

创建脚本就默认的update、start方法:(这些官方的文档都是有的)

Start:Update函数第一次运行前调用,一般用于游戏对象的初始化。比如GetComPonent之类。
Update:每帧调用;一般用于更新场景和状态,物理相关不建议在此处处理。
Awake:脚本实例对象被创建时调用,也可以用于游戏对象的初始化,但是Awake是在所有脚本的Start之前执行。
FixedUpdate:固定间隔执行,一般用于物理状态更新。
LateUpdate:每帧执行,在Update之后。一般和摄像机有关的状态放在这里处理。

现在我来简单测试下:我在场景中添加了两个Cube,分别添加了Script1,Script2,下面是执行log,可以看到Awake是在所有脚本之前调用的。

这里写图片描述

二、事件响应函数:

MonoBehaviour中的事件响应函数都是已On开头的,比如:鼠标事件,脚本激活、销毁,碰撞等。
OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏物体。可以作为协同程序,在函数中使用yield语句即可
OnApplicationPause:当玩家暂停时发送到所有的游戏物体。可以作为协同程序,在函数中使用yield语句即可。
OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。
OnBecameInvisible:当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。
OnBecameVisible:当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。
OnCollisionEnter:当此collider/rigidbody与另一个rigidbody/collider接触时调用。
OnCollisionExit:当此collider/rigidbody停止触发另一个rigidbody/collider时。
OnCollisionStay:当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
OnConnectedToServer:当你成功连接到服务器时,在客户端调用。
OnDisconnectedFromServer:失去连接或从服务器端断开时在客户端调用。
OnFailedToConnectToMasterServer:当连接主服务器出现问题时在客户端或服务器端调用。
OnControllerColliderHit:在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。
OnDestroy:脚本销毁时调用。
OnDisable:对象禁用或者取消激活时调用。
OnEnable:对象变为可用或激活状态时此函数被调用。
OnDrawGizmosSelected:如果想在物体被选中时绘制gizmos,执行这个函数。
OnGUI:渲染和处理GUI事件时调用。
OnJointBreak:当附在同一对象上的关节被断开时调用。
OnLevelWasLoaded:一个新关卡被载入时此函数被调用。
OnMouseDown、OnMouseDrag、OnMouseEnter、OnMouseExit、OnMouseOver、OnMouseUp:鼠标事件。
OnMouseUpAsButton:只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。
OnTriggerEnter:当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。
OnTriggerExit:当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。
OnTriggerStay:当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

三、默认组件

组件对应的变量名是组件名的小写。
Transform:对象的位置,角度,缩放。变量名:transform
Rigidbody:刚体属性。
Render:渲染物体模型。
Light:灯光属性。
Camera:相机属性。
Collider:碰撞体属性。
Animation:动画属性。
Audio:声音属性。

四、组件获取函数

获取组件的方法由于比较耗时,所以如果你在update修改transform的话,一般可以先在Start中获取这个组件的引用,然后在update中使用引用去修改。
比如获取上面例子cube1的script1脚本:
[c-sharp]Script1 spt1 = GetComponent( );[/c-sharp]
下面是获取组件的函数:
GetComponent:获取组件。
GetComponents:获取组件列表。
GetComponentInChildren:返回Type类型组件,在GameObject或它的任何子物体使用深度优先搜索,仅返回激活的组件。
GetComponentsInChildren:在GameObject或任何它的子物体,返回全部Type类型组件。

五、获取场景中的游戏对象

同样和获取组件一样,该方法比较费时,一般在Start中获取引用。
[c-sharp]
GameObject cube1 = GameObject.Find(“Cube1”);
GameObject cube1 = GameObject.FindWithTag(“tag_cube1”);
[/c-sharp]
除了上面的方法,也可以使用public对象,直接使用面板拖拽赋值。

发布了72 篇原创文章 · 获赞 56 · 访问量 12万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览