Unity3d学习笔记(二)——游戏对象使用总结

什么是游戏对象 (GameObjects)?

游戏中的每个对象都是一个游戏对象 (GameObject)。然而,游戏对象 (GameObjects) 本身不做任何事情。它们需要特殊属性 (special properties) 才能成为一个角色、一种环境或者一种特殊效果。但是每个对象要做很多不同的事情。如果每个对象都是一个游戏对象 (GameObject),我们该如何区分静态空间 (static room) 中的交互式启动对象 (interactive power-up object) 呢?是什么使得这些游戏对象 (GameObjects) 互不相同?
答案是游戏对象 (GameObjects) 是一种容器。它们是空盒,能够容纳组成一个光照贴图的岛屿或物理驱动的小车的不同部分。因此,要真正理解游戏对象 (GameObjects),就必须了解这些组成部分(称为“组件 (Components)”)。根据您要创建的对象类型,您可以添加不同的组件 (Components) 组合到游戏对象 (GameObject) 中。想象一个游戏对象 (GameObject) 是一口空烹饪锅,组件 (Components) 是不同的作料,它们构成了您的游戏食谱。您也可以使用脚本 (Scripts) 制作自己的组件 (Components)。
游戏蛮牛Unity用户文档

概括一下,GameObject像是一个盒子,在里面装了个必要的Transform组件,然后还可以装其它任意的组件,这些组件共同来完成GameObject的行为。游戏对象由它拥有的组件决定功能。

总结了一些目前遇到过/使用过的游戏对象操作,还有别的留待学习以后补充。
*目录(标题内容)参照【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作

一、创建GameObject

  • 通过编辑器可视化添加
    这里写图片描述
  • 利用脚本(这里又可以涉及到克隆和预制,留到后面说)
    普通的创建可以直接利用函数GameObject.CreatePrimitive()

二、获取GameObject

  • 在Inspector进行赋值(需要把变量声明为Public
    比如在太阳系代码中,通过把运行速度speed设置为public,即可手动输入赋值。
    这里写图片描述
  • 也可以利用函数,unity中提供了获取对象的五种方法
  1. 通过对象名称(Find方法)
  2. 通过标签获取单个游戏对象(FindWithTag方法)
  3. 通过标签获取多个游戏对象(FindGameObjectsWithTags方法)
  4. 通过类型获取单个游戏对象(FindObjectOfType方法)
  5. 通过类型获取多个游戏对象(FindObjectsOfType方法)

三、添加组件和修改组件

  • 可以在Inspector中手动添加和删除,以及进行赋值、修改等操作。
  • 利用函数【AddComponent<>()】添加组件、【GetComponent<\Rigidbody>().(属性值)=】赋值、修改属性

四、发送广播和消息

Message相关有3条指令:
SendMessage (“函数名”,参数,SendMessageOptions) //GameObject自身的Script
BroadcastMessage (“函数名”,参数,SendMessageOptions) //自身和子Object的Script
SendMessageUpwards (“函数名”,参数,SendMessageOptions) //自身和父Object的Script

一个例子:使用BroadcastMessage() 方法向子对象发送消息

//子对象
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chair : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {



}
    void SonMethod()
    {
        Debug.Log("Hello Father");
    }
}
//父对象
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Table : MonoBehaviour {

    // Use this for initialization
    void Start () {
        BroadcastMessage("SonMethod");
    }

    // Update is called once per frame
    void Update () {

    }

}

五、克隆和预设

  • 克隆游戏对象可以“创建”一个完全具有一定功能的游戏对象(包括其所有的组件)
GameObject cloneGameObject=  GameObject.Instantiate(template);
  • 预设可以理解为一个类模版,使用预设可以方便快捷地创建大量相同属性的对象。首先可以利用编辑器可视化添加对象,然后在Resource文件夹中创建预设,如图:
    这里写图片描述
//实例化预设
 GameObject objPrefab = (GameObject)Resources.Load("Table");
Instantiate(objPrefab);
  • 预设和克隆:对象克隆也是用来大批量创建对象的,但是这些对象之间并无关联,也不会因为被克隆的对象属性改变而影响克隆的对象。预设不同,修改预设会使得所有实例化的对象属性发生改变。

六、运动、缩放,旋转

  • 游戏对象运动的本质是位移,也就是坐标的变换。一个对象的位置由(x,y,z)确定,当其中某个值改变,游戏对象就实现了运动。
    有多种方法可以实现游戏对象的运动:
    (1)直接修改物体的position
    (2)transform.Translate(Vector3)
    (3)transform.position += Vector3
  • 缩放:
    transform.localScale = Vector(x, y, z)表示x轴方向上缩放x,y轴方向上缩放y,z轴方向上缩放z ;也可以通过乘以系数达到整体缩放的效果
  • 旋转:
    transform.Rotate()函数是自身的旋转,比如太阳系代码中行星的自转;transform.RotateAround()则是围绕某个点旋转,比如太阳系代码中行星的公转
GameObject.Find("Sun").transform.Rotate(Vector3.up * Time.deltaTime * 10);
this.transform.RotateAround(origin.position, axis, speed * Time.deltaTime);

移动、缩放、旋转都可以在Inspector手动修改,需要注意的是position,如果是子对象,修改position是以它的父对象为origin,调整时要记住。
这里写图片描述

七、销毁游戏对象

  • GameObject.Destroy
  • Destroy(gameObject);

八、其他一些操作

  • 激活或者关闭对象
  • 修改对象标签
  • ……
    都是既可以利用脚本写代码,也可以直接在属性页进行修改的。

猜你喜欢

转载自blog.csdn.net/qq_32335095/article/details/79845243
今日推荐