加深unity中物体,组件,资源三者的关系的理解

转载! 转载自:对面向组件和Unity中脚本与gameobject关系的个人理解

对面向组件和Unity中脚本与gameobject关系的个人理解

首先给结论,gameobject下面挂的脚本都是这个gameobject的组件!组件就是一个对象,它的类型就是这个脚本的类。

一些笔记:目前对于unity中 hierarchy面板里gameobject与挂在它下面的脚本的关系的个人理解。

有这个念头是在写连连看的时候产生的,当时有一个脚本是专门管理UI的,另外有一个脚本是gamelogic,这两个脚本都挂在一个名字为runtime的gameobject下。

因为连连看是需要点击UI,然后相应去改变gamelogic脚本里面一些变量。当时苦恼应该怎么实现两个脚本的交互,虽然知道可以用事件去实现,让gamelogic脚本去监听UI脚本的来实现,但不知道如何在一个脚本里面去访问另外一个脚本的变量或者函数。 因为脚本是一个类,如果是访问类非静态成员或者函数的话,是要通过对象来访问的,那么问题就来了,这两个脚本挂在gameobject下面后,这两个脚本对应的对象是谁呢?后来查阅了一下加上面向组件编程这个概念,我就懂了。
如果是同一个gameobject下脚本互相访问,只要通过getcomponent<脚本名字>()就可以访问到这个脚本组件的所有public东西了!
再啰嗦一句,因为脚本复用性高,所以做成一个组件,所以采用面向组件编程。

举个例子,现在我想动态生成玩家和怪物,而玩家和怪物都共用一个脚本actorcomponent控制,那么我只要先用代码new出gameobject,然后相应地给这些gameobject挂上不同的模型,挂上相同的脚本actorcomponent即可,这样就是复用性和面向组件的体现。

还有对自己啰嗦一下,脚本是需要解释的,是在unity里,它采用了c#,一个脚本写好了就进行编译,我也可以不采用c#,他们可以采用一套自己搞得语言来写,只要能解释好就可以了。解释之后的脚本其实就是去调用一些dll里面的类啊函数啊静态变量啊之类的,而dll估计就是事先写好的程序集。为毛unity不提供.h.cpp而是给dll呢?反正都是c++底层实现,非要弄dll让我们去调。因为unity不开源啊~( ̄▽ ̄~)~
————————————————
版权声明:本文为CSDN博主「unknow__」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011294019/article/details/68948023

组件

unity中常见的组件有 Transform组件,GameObject必带Transform组件,Collider组件是碰撞器,Rigidbidy组件是刚体属性器(拥有物理属性),MeshRender组件是网格渲染器。

1.获取游戏物体组件

1.transform组件是内置的组件,直接通过transform访问。

Transform组件

Transform 所有的组件都有的属性 (转载,链接在段落尾)

1、Position 位置
2、Rotation 旋转的
3、Scale 缩放
4、Unity常见物体移动的方式
(1)transform.position = new Vector(1,1,1); 直接改变物体的位置,适合非物理碰撞的移动;
(2)Transform.Translate( Vector.forward * Time.deltaTime); 跟第一种类似,适合非物理的移动;
(3)Rigidbody.MovePosition(new Vector3(1,1,1)); 跟上面两种类似,但是很少用;
(4)Rigidbody.AddForce(transform.forwrd * 100); 给物体施加力的作用,适合物理类移动;
(5)Rigidbody.velocity = new Vector3(1,0,0); 直接给物体设定速度,适合物理类移动,
注意:如果你的物体移动在碰撞时抖动,考虑是否用了物理的方式移动物体;如果物体被设为IsKinematic,则只能用前三种方式(直接改变位置)移动物体;
————————————————
版权声明:本文为CSDN博主「农家一碗香」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gan_2012/article/details/109755814

变换组件 (Transform Component)

在 Unity 中创建一个没有变换组件 (Transform Component) 的游戏对象 (GameObject) 是不可能的。变换组件 (Transform Component) 是最重要的组件 (Components) 之一,因为所有游戏对象 (GameObject) 的变换 (Transform) 属性均由此组件启用。在游戏世界/场景视图 (Scene View) 中,它定义了游戏对象 (GameObject) 的位置、旋转和缩放。如果一个游戏对象 (GameObject) 没有变换组件 (Transform Component),它只是计算机内存中的一些信息,实际上并不存在于场景世界。

物体

Unity创建游戏物体的三种方法

GameObject 继承自:Object Unity 场景中所有实体的基类
GameObject unity官方手册

资源 Aeeset

Unity自己生成的Asset打开来看基本都是这个格式的文本,该文本格式我们称之为YAML

Unity 使用自定义资源(.asset)配置数据

posted @ 2022-06-14 18:01  专心Coding的程侠  阅读(191)  评论(0编辑  收藏  举报