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对象,直接使用面板拖拽赋值。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BIM到Unity代码是将BIM(建筑信息模型)的数据和设计元素转换为Unity引擎可读取的代码。这种转换使得BIM的数据能够在虚拟现实和增强现实应用程序中使用,例如建筑设计可视化和虚拟建设模拟。在转换过程中,需要使用具有BIM到Unity的导出功能的建模软件,比如Revit,Tekla和SketchUp等。这些软件可以导出BIM数据和元素作为FBX或OBJ格式,这些格式可以被Unity引擎识别并渲染。Unity引擎的开发者可以使用这些数据和元素来创建建筑虚拟现实体验,比如漫游、交互和可视化。在Unity引擎中使用BIM的好处包括:可视化现实的建筑设计,早期决策和问题预测,更好的沟通和团队协作能力等。总之,BIM到Unity代码这一转换过程在建筑设计和建设领域中具有非常重要的作用,可以提高建筑设计和建设的效率和准确性,同时也可以为用户提供更好的交互和体验。 ### 回答2: BIM和Unity是两种不同的软件,BIM是一种建筑信息模型设计软件,用于建筑设计和施工阶段的管理,而Unity则是一种游戏开发引擎,用于开发游戏和虚拟现实应用程序。将BIM转换为Unity代码是一种将建筑模型转换为游戏或虚拟现实应用程序的过程,该过程需要一定的技术和专业知识。 首先,将BIM模型导入到Unity中需要使用插件或者脚本。这个过程需要注意模型的正确性和精确性,以确保在Unity中呈现的模型与原模型相同。同时还需要考虑场景的光照、材质和纹理等方面,以提高模型的真实感和呈现效果。 其次,将BIM模型转换为Unity代码需要进行编程和脚本编写。这需要了解Unity的编程语言和API,以及与BIM模型对应的数据结构和属性等方面。在编写代码过程中还需要考虑模型的交互性和动态性,使得用户可以通过鼠标或手柄等设备操作模型并观察其动态效果。 最后,将BIM模型转换为Unity代码还需要进行测试和优化。这个过程包括调试代码、优化模型的性能和质量等方面。与此同时,还需要考虑不同设备平台和系统之间的兼容性,以确保应用程序的稳定性和可用性。 总之,将BIM模型转换为Unity代码需要一定的技术和专业知识,但可以为建筑设计和施工过程提供更加真实和动态的可视化效果,提高工作效率和工作质量。 ### 回答3: BIM到Unity代码转换是将建筑信息模型中的数据转化为Unity游戏引擎中可操作的3D物体和场景的过程。这个过程涉及多个步骤,需要注意数据的精度、准确性和模型的适应性。 首先,需要将BIM模型中的数据导入到Unity中。这个可以通过导出BIM数据到通用的文件格式(如OBJ、FBX)或者专属格式(如IFC)来实现。同时,还需要考虑数据是否能够被Unity识别并精准还原。 接着,需要对转化后的物体进行调整和优化,以达到最佳的视觉和性能效果。这个包括调整材质、光照、渲染等要素,同时还需要注意数据的精度和准确性,以避免误解和损失。 另外,为了让用户能够更好地体验到场景,还需要通过程序对场景进行优化,增加交互元素和动态效果,比如添加水流、光影等。 总体而言,BIM到Unity代码转化是一个涉及多个要素的复杂过程,需要对建筑模型数据和游戏引擎技术熟练掌握,才能达到最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值