GameObjects: 游戏对象,即游戏中的最基本单位,游戏中的每一个对象都是游戏对象。它相当于一个容器,本身并无太多属性,需添加各种组件,资源后才能达到设计者的所希望的游戏行为目的。
Assets: 指可应用于Unity上的各种资源,为游戏添加各种属性,从而实现目标效果;同时,一个Unity Project的Assets文件夹指存储于本地计算机中的各种图片,预制,script等文件的总和。一个Assets中可以包含多个GameObject,GameObject从逻辑上讲存储于Assets文件夹中。
游戏结构目录:
Assets
MonoBehaviour 基本行为触发条件:
代码如下:
// Use this for initialization
void Start () {
Debug.Log("init Start");
}
// Update is called once per frame
void Update () {
Debug.Log("init Update");
}
void Awake()
{
Debug.Log("init Awake");
}
void FixedUpdate()
{
Debug.Log("init FixedUpdate");
}
void LateUpdate()
{
Debug.Log("init LateUpdate");
}
void OnGUI()
{
Debug.Log("init OnGUI");
}
void OnDisable()
{
Debug.Log("init OnDisable");
}
void OnEnable()
{
Debug.Log("init OnEnable");
}
Start:
Per frame:
End:
结论:
Description
描述属性
table 的对象是 GameObject :
第一个选择框是 GameObject.activeSelf 属性,表示该对象是否被选中。
prefabs 是 PrefabUtility.GetPrefabObject 属性。
Transform 属性:
第一行属性框为 Transform.position 属性,可以调整游戏对象的空间位置。
第三行属性框为 Transform.localScale 属性,调整游戏对象的大小。
table 的部件:
Mesh Filter: 网格过滤器,从资源中获取网格,并将其传递到网格渲染器,加以渲染后在屏幕上呈现。
Mesh Renderer: 网格渲染器,从网格过滤器中获取几何图形并将其渲染到由该对象的变换组件定义的位置。
UML
简单代码
新建项目,其中有 Sphere 游戏对象,代码如下:
void Start()
{
Debug.Log("init start");
}
void FixedUpdate()
{
var x = GameObject.Find("Sphere");
if (x.name != null)
{
Debug.Log("find the gameobject");
}
else
{
Debug.Log("Not found");
}
}
结果如下:
代码如下:
void Start()
{
GameObject sph = GameObject.Find("Sphere");
GameObject child = GameObject.CreatePrimitive(PrimitiveType.Cube);
child.transform.parent = sph.transform;
Debug.Log("Success");
}
结果如下:
代码如下:
GameObject obj = GameObject.Find("Sphere");
print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
int i = 0;
while (i < obj.transform.childCount)
{
Transform child = obj.transform.GetChild(i);
print("这是第: " + i + " 个子对象, 名称为: " + child.name);
i++;
}
结果如下:
https://img-blog.csdn.net/20180327110756385?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0R1a2VfU3Rhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70” alt=”结果” title=”” />/result3.jpg)
代码如下:
GameObject obj = GameObject.Find("Sphere");
print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
int i = 0;
while (i < obj.transform.childCount)
{
Transform child = obj.transform.GetChild(i);
print("这是第: " + i+1 + " 个子对象, 名称为: " + child.name);
GameObject pchild = GameObject.Find(child.name);
GameObject.Destroy(pchild);
i++;
}
预设与对象克隆
Prefabs: 预制可以存储一个带有组件和属性的 GameObject 作为模板,当想创建新的实例时,可以直接拖动模板进行创建。对预制做的修改可以应用到由该模板生成的所有实例中,也可以单独编辑每一个实例。
总的来说,预设和对象克隆都能生成新的对象实例,但相比较而言,由 clone 生成的实例,编辑原对象时,就不能应用到所有实例中。
预制 table :
public GameObject prefab;
void Start()
{
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
}
组合模式
组合模式:
定义:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对组合对象和单个对象的使用具有一致性。
包含三个部分:抽象构件,叶子构件和容器构件。
目的即是使得对根节点的调用方法对叶子节点同样适用,使得工作效率更高。
代码:
有三种发送消息的函数,其中BroadcastMessage()由父类发送给子类,括号里面:第一个参数为回应的函数,第二个参数为传递给回应函数的参数。
void Start () {
gameObject.BroadcastMessage("MySon","I am your father");
}
void MySon(string ss)
{
Debug.Log("I am your son");
}
结果: