【Unity】6.3 經過 C# 腳本建立和訪問遊戲對象

分類:Unity、C#、VS2015 函數

建立日期:2016-04-16 spa

1、簡介

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

本節示例的最終運行效果以下: 3d

image

2、查找場景中的遊戲對象

在Unity腳本中,開發人員能夠經過下面量的方式來訪問遊戲對象。 code

一、經過名稱字符串來查找 orm

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

例如: blog

private GameObject obj; 遊戲

void Start() 圖片

{

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

obj = GameObject.Find("Cube");

}

二、經過標籤(Tag)來查找

使用函數GameObject.FindWithTag()查找在參數中指定的遊戲對象。若是場景中存在指定標籤的遊戲對象,那麼返回該對象的引用,不然返回null。

例如:

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

三、注意的問題

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

3、建立遊戲對象

除了查找場景中的遊戲對象外,固然也能夠直接用腳本建立對象並將其添加到場景中。具體用法見接下來介紹的示例。

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

4、本節例子的設計步驟

一、在Unity的Project中Assets文件夾下添加一個名爲「6.3」的子文件夾,而後在該文件夾下建立一個名爲「Scene6_3.unity」的場景。

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

image

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

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

image

其中,Cube的參數以下:

image

Main Camera的參數以下:

image

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

image

六、切換到VS2015,在6.3子文件夾下添加一個名爲「Demo3_1.cs」的腳本文件:

image

添加後看到的結果以下:

image

七、將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;
        }
    }
}

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

image

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

image

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

image

單擊【建立立方體】按鈕,會看到下落的立方體(由於代碼中添加了剛體因此會自動下落),可是下落到Plane上後就停下來了:

image

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

image

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

image

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

image

哈哈,好玩吧。

相關文章
相關標籤/搜索