【Unity】6.3 通過 C# 腳本創建和訪問游戲對象


分類:Unity、C#、VS2015

創建日期:2016-04-16

一、簡介

在游戲開發過程中,腳本不但需要訪問腳本所在的游戲對象的組件,還經常需要訪問和控制真他游戲對象。另外,根據項目需求,還可能需要通過腳本創建對象。

本節示例的最終運行效果如下:

image

二、查找場景中的游戲對象

在Unity腳本中,開發人員可以通過下面量的方式來訪問游戲對象。

1、通過名稱字符串來查找

使用函數GameObject.Find()查找在參數中指定的游戲對象。如果場景中存在指定名稱的游戲對象,則返回該對象的引用,否則返回null。如果存在多個重名的對象,該方法僅返回第一個對象的引用。

例如:

private GameObject obj;

void Start()

{

//尋找整個場景中名為Cube的游戲對象並賦予obj變量

obj = GameObject.Find("Cube");

}

2、通過標簽(Tag)來查找

使用函數GameObject.FindWithTag()查找在參數中指定的游戲對象。如果場景中存在指定標簽的游戲對象,那么返回該對象的引用,否則返回null。

例如:

GameObject player=GameObject.FindWithTag("player");

3、注意的問題

獲取游戲對象或組件的函數都比較耗時,因此,一般不要在Update()方法中去獲取這些對象,而是應該在Start()方法中查找並將其保存到聲明的字段變量中,然后再在Update()方法中使用這些組件或對象。

三、創建游戲對象

除了查找場景中的游戲對象外,當然也可以直接用腳本創建對象並將其添加到場景中。具體用法見接下來介紹的示例。

在實際項目中(包括游戲項目、虛擬現實VR項目,增強現實AR項目、……),這些場景中動態添加、修改或者刪除的對象都需要通過腳本來控制。

四、本節例子的設計步驟

1、在Unity的Project中Assets文件夾下添加一個名為“6.3”的子文件夾,然后在該文件夾下創建一個名為“Scene6_3.unity”的場景。

2、向場景中添加一個Plane,設置(復位)其位置:

image

3、向場景中添加一個Cube。

4、調整攝像機以及Cube的參數,使其方便地可看到:

image

其中,Cube的參數如下:

image

Main Camera的參數如下:

image

5、向場景中添加一個空GameObject,並將其換名為manager:

image

6、切換到VS2015,在6.3子文件夾下添加一個名為“Demo3_1.cs”的腳本文件:

image

添加后看到的結果如下:

image

7、將Demo3_1.cs文件改為下面的內容並保存:

using UnityEngine;
using System.Collections;

public class Demo3_1 : MonoBehaviour
{
    public Texture texture;
    private GameObject obj;
    private Renderer render;
    void Start()
    {
        //獲取游戲對象
        obj = GameObject.Find("Cube");
        //獲取該對象的渲染器
        render = obj.GetComponent<Renderer>();
    }

    void OnGUI()
    {
        if (GUILayout.Button("創建立方體", GUILayout.Height(50)))
        {
            //設置該模型默認為立方體
            GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
            //為對象添加一個剛體,賦予物理屬性
            obj.AddComponent<Rigidbody>();
            //賦予對象的材質紅色
            obj.GetComponent<Renderer>().material.color = Color.green;
            //設置對象的名稱
            obj.name = "Cube";
            //設置此模型材質的位置坐標
            obj.transform.position = new Vector3(0, 5f, 0);
        }
        if (GUILayout.Button("創建球體", GUILayout.Height(50)))
        {
            //設置該模型默認為立方體
            GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            //為對象添加一個剛體,賦予物理屬性
            obj.AddComponent<Rigidbody>();
            //賦予對象的材質紅色
            obj.GetComponent<Renderer>().material.color = Color.red;
            //設置對象的名稱
            obj.name = "Sphere";
            //設置此模型材質的位置坐標
            obj.transform.position = new Vector3(0, 5f, 0);
        }
        if (GUILayout.Button("添加顏色", GUILayout.Width(100), GUILayout.Height(50)))
        {
            //修改渲染顏色為紅色
            render.material.color = Color.red;
        }
        if (GUILayout.Button("添加貼圖", GUILayout.Width(100), GUILayout.Height(50)))
        {
            //添加組件貼圖
            render.material.mainTexture = texture;
        }
    }
}

8、切換到Unity,向6.3子文件夾下拖放一個圖片(隨便選一個圖片就行):

image

9、在層次視圖中選中manager,然后將Demo3_1拖放到檢視圖中,再將圖片拖放到檢視圖腳本下的Texture上(賦初值):

image

10、按【播放】按鈕進入預覽模式,即可看到下面的運行界面:

image

單擊【創建立方體】按鈕,會看到下落的立方體(因為代碼中添加了剛體所以會自動下落),但是下落到Plane上后就停下來了:

image

單擊【創建球體】按鈕,這個球會下落到立方體的上面停下來:

image

單擊【添加顏色】按鈕,就會給左邊那個立方體換色:

image

單擊【添加紋理】按鈕,就會給左邊那個立方體貼圖:

image

哈哈,好玩吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM