一、创建游戏物体的三种方法
例子:
public class API03GameObject : MonoBehaviour
{
public GameObject prefab;
void Start ()
{
//1.第一种创建方法(当我们想创建一个空的游戏物体,然后在游戏物体下面添加东西时可以这样创建,新建的游戏物体相当于一个空物体)
//GameObject go = new GameObject("Cube");
//2.第二种
//根据Prefab进行初始化
//根据另外一个游戏物体进行实例化(场景中的物体比如MainCamera)
//GameObject.Instantiate(prefab);
//3.第三种
//根据原始的一些图形来创建,需要指定类型
GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject.CreatePrimitive(PrimitiveType.Cube);
}
}
二、如何给游戏物体通过代码添加组件
例子:
public class API03GameObject : MonoBehaviour
{
public GameObject prefab;
void Start ()
{
//1.第一种创建方法(当我们想创建一个空的游戏物体,然后在游戏物体下面添加东西时可以这样创建,新建的游戏物体相当于一个空物体)
//GameObject go = new GameObject("Cube");
//2.第二种
//根据Prefab进行初始化
//根据另外一个游戏物体进行实例化(场景中的物体比如MainCamera)
//GameObject.Instantiate(prefab);
//3.第三种
//根据原始的一些图形来创建,需要指定类型
GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject go= GameObject.CreatePrimitive(PrimitiveType.Cube);
go.AddComponent<Rigidbody>();//添加组件
go.AddComponent<API01EventFunction>();//添加脚本
}
}
三、如何禁用和启用一个游戏物体
例子:
public class API03GameObject : MonoBehaviour
{
public GameObject prefab;
void Start ()
{
//1.第一种创建方法(当我们想创建一个空的游戏物体,然后在游戏物体下面添加东西时可以这样创建,新建的游戏物体相当于一个空物体)
//GameObject go = new GameObject("Cube");
//2.第二种
//根据Prefab进行初始化
//根据另外一个游戏物体进行实例化(场景中的物体比如MainCamera)
//GameObject.Instantiate(prefab);
//3.第三种
//根据原始的一些图形来创建,需要指定类型
GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject go= GameObject.CreatePrimitive(PrimitiveType.Cube);
go.AddComponent<Rigidbody>();//添加组件
//go.AddComponent<API01EventFunction>();//添加脚本
Debug.Log(go.activeInHierarchy);//activeInHierarchy(当我们将父物体禁用时,子物体的activeInHierarchy属性也为false但是子物体的activeSelf为true)
go.SetActive(false);
Debug.Log(go.activeInHierarchy);
Debug.Log(go.tag);
}
}
四、GameObject、Component和Object的千丝万缕的关系
游戏(一个游戏由多个场景组成)场景(一个场景由多个游戏物体组成)游戏物体(GameObject一个游戏物体由多个组件组成)组件(Component)包括:Transform、Rigidbody、MeshRender、Collider、NavMeshAgent、Animation、Animator
共同的基类UnityEngine.Object
public class API03GameObject : MonoBehaviour
{
public GameObject go;
void Start ()
{
Log(go.name);
Debug.Log(go.GetComponent<Transform>().name);//这里打印的还是组件的名字
}
}
五、UnityEngine下Object拥有的静态方法
DontDestroyOnLoad游戏物体不会在场景切换的时候销毁(可以用来设置某一个共享的游戏物体)
FindObjectOfType找到一个这个类型的组件找到一个就返回
FindObjecstOfType找到多个
public class API03GameObject : MonoBehaviour
{
public GameObject go;
void Start ()
{
Light light= FindObjectOfType<Light>();//也可以通过GameObject调用
light.enabled = false;
Transform[] ts= FindObjectsOfType<Transform>();//不查找未激活的游戏物体
foreach (Transform t in ts)
{
Debug.Log(t);
}
}
}