Unity 3D 編寫腳本

2021-06-15 14:07 更新

本節(jié)我們正式在 Unity 3D 中編寫一個(gè)簡(jiǎn)單的腳本實(shí)例。

本節(jié)以C#Script為腳本編程語言編寫實(shí)例。

創(chuàng)建腳本

  1. 執(zhí)行 AssetsCreateC#ScriptJavaScript 菜單命令創(chuàng)建一個(gè)空白腳本,將其命名為 Move。

在 Project 面板中雙擊 Move 打開腳本進(jìn)行編寫。在 Upadate()函數(shù)中寫入代碼。

    using UnityEngine;
    using System.Collections;
    public class Move:MonoBehaviour{
        void Update(){
            transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        }
    }

Input.GetAxis()函數(shù)返回-1~1的值,在水平軸上,左方向鍵對(duì)應(yīng) -1,右方向鍵對(duì)應(yīng) 1。由于目前不需要向上移動(dòng)攝像機(jī),所以 Y 軸的參數(shù)為 0。

  1. 執(zhí)行 EditProject SettingsInput(輸入)菜單命令,對(duì)映射到水平和垂直方向的名稱和快捷鍵進(jìn)行修改。

鏈接腳本

腳本創(chuàng)建完成后,需要將其添加到物體上。在 Hierarchy 視圖中,單擊需要添加腳本的游戲物體 Main Camera(主攝像機(jī)),然后執(zhí)行 ComponentScriptMove 菜單命令,如下圖所示,Move 腳本就鏈接到了 Main Camera 上。

攝像機(jī)(Camera)是向玩家捕獲和顯示世界的設(shè)備。通過自定義和操縱攝像機(jī),可以自由旋轉(zhuǎn)游戲視角。場(chǎng)景中攝像機(jī)的數(shù)量不受限制,它們可以以任何順序放置在屏幕上的任何地方,或者只捕獲屏幕的某些部分。攝像機(jī)參數(shù)如下圖和下表所示。

參數(shù) 描述 功能
Clear Flags 清除標(biāo)識(shí) 確定屏幕哪些部分將被清除。這是為了方便使用多個(gè)攝像機(jī)捕捉不同的游戲元素。
Background 背景 在完成了視圖中的所有元素的繪制后以及沒有天空盒的情況 下,剩余屏幕的顏色。
Culling Mask 消隱遮罩 包含層或忽略層將被攝像機(jī)渲染。在檢視窗口向?qū)ο蠓峙鋵印?/td>
Projection 投影 切換攝像機(jī)以模擬透視。
Perspective 透視 透視攝像機(jī),由原點(diǎn)向外擴(kuò)散性發(fā)射。即,距離越遠(yuǎn),它的視口 區(qū)域也就越大,透視視圖和人眼的視覺感受是一致的。
Orthographic 正交 正交攝像機(jī),無論遠(yuǎn)近,它的視口范圍永遠(yuǎn)是固定的,相機(jī)會(huì)均 勻地渲染物體,沒有透視感。
Size 大小 當(dāng)攝像機(jī)設(shè)置為正交模式時(shí),攝影機(jī)視口的大小。
Field of view 視野 攝像機(jī)的視野,沿著本地 Y 軸測(cè)量,以度為單位。
Clipping Planes 裁剪面 攝像機(jī)從開始到結(jié)束渲染的距離。
Near 相對(duì)于攝像機(jī),繪制將發(fā)生的最近點(diǎn)。
Far 遠(yuǎn) 相對(duì)于攝像機(jī),繪制將發(fā)生的最遠(yuǎn)點(diǎn)。
Viewport Rect 視口矩形 攝像機(jī)畫面顯示在屏幕上的區(qū)域。
X 攝像機(jī)視圖的開始水平位置。
Y 攝像機(jī)視圖的開始垂直位置。
W 寬度 攝像機(jī)輸出在屏幕上的寬度。
H 高度 攝像機(jī)輸出在屏幕上的高度。
Depth 深度 攝像機(jī)在渲染順序上的位置。具有較低深度的攝像機(jī)將在較高 深度的攝像機(jī)之前渲染。
Rendering Path 渲染路徑 定義攝像機(jī)的渲染路徑。
Target Texture 目標(biāo)紋理 用于將攝像機(jī)視圖輸出并渲染到屏幕,一般用于制作導(dǎo)航圖或 者畫中畫等效果。
Occlusion Culling 遮擋剔除 指定是否剔除物體背向攝像機(jī)的部分。
HDR 高動(dòng)態(tài)光照渲染 啟用攝像機(jī)的高動(dòng)態(tài)范圍渲染功能。

運(yùn)行測(cè)試

單擊播放按鈕,在 Scene 視圖中,使用鍵盤上的 W(前)、S(后)、A(左)、D(右)鍵移動(dòng)攝像機(jī),轉(zhuǎn)換視角或位置。

注意事項(xiàng)

在 Unity 3D 中,C# 腳本的運(yùn)行環(huán)境使用了 Mono 技術(shù)。

Mono 是指 Novell 公司致力于 .NET 開原的工程,利用 Mono 技術(shù)可以在 Unity 3D 腳本中使用所有 .NET 的相關(guān)類。

  1. 腳本中的類都繼承自 MonoBehaviour 類。

Unity 3D 中所有掛載到游戲?qū)ο笊系哪_本中包含的類都繼承自 MonoBehaviour 類。

MonoBehaviour 類中定義了各種回調(diào)方法,如 Start 、update 等等。

通過在 Unity 中創(chuàng)建 C# 腳本,系統(tǒng)模板已經(jīng)包含了必要的定義。

  1. 使用 AwakeStart 方法初始化。

用于初始化的 C# 腳本代碼必須置于 AwakeStart 方法中。

AwakeStart 的不同之處在于:

  • Awake 方法是在加載場(chǎng)景時(shí),并且在所有 Start 方法之前運(yùn)行。

  • Start 方法是在第一次調(diào)用 UpdateFixedUpdate 方法之前調(diào)用。

  1. 類名必須匹配文件名。

C# 腳本中類名必須和文件名相同,否則當(dāng)腳本掛載到游戲?qū)ο髸r(shí),控制臺(tái)會(huì)報(bào)錯(cuò)。

  1. 只有滿足特定情況時(shí)變量才能顯示在屬性查看器中。

只有公有的成員變量才能顯示在屬性查看器中,而 privateprotected 類型的成員變量不能顯示,如果要使屬性項(xiàng)在屬性查看器中顯示,它必須是 public 類型的。

  1. 盡量避免使用構(gòu)造函數(shù)。

不要在構(gòu)造函數(shù)中初始化任何變量,而應(yīng)使用 AwakeStart 方法來實(shí)現(xiàn)。

在單一模式下使用構(gòu)造函數(shù)可能會(huì)導(dǎo)致嚴(yán)重后果,因?yàn)樗哑胀悩?gòu)造函數(shù)封裝了,主要用于初始化腳本和內(nèi)部變量值,這種初始化具有隨機(jī)性,容易引發(fā)引用異常。因此,一般情況下盡量避免使用構(gòu)造函數(shù)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)