属性面板 脚本_3.1 创建和使用脚本
在unity中,游戲物體的行為是通過組件來驅動的,我們可以通過內建的組件來給我們的游戲物體組合各種能力,盡管如此,要知道我們的需求永遠是動態(tài)的,很快我們就會發(fā)現,內建的組件功能已經無法滿足我們的需求,這時就需要我們使用腳本來創(chuàng)建新的組件。通過腳本的形式,我們就可以自定義組件的屬性及其相應方式。
在新版本的Unity中(筆者當前版本Unity2017.3f)僅原生支持C#,至于這個語言的特性,我們在C#基礎篇中已經有過詳細的介紹,這里便不再贅述。
當然出了添加這種“.cs”后綴的腳本文件作為組件的方式外,我們還可以使用以”.DLL”為后綴的動態(tài)鏈接庫文件來作為組件,當然前提是該dll符合Unity的限制規(guī)范,比如在2017.3版本中,我們可以使用.Net3.5版本的dll,也可以使用.Net4.6版本的dll(該功能還處于實驗階段,選擇后會提示你重啟Unity)。如下圖
設置兼容版本為.Net 4.6創(chuàng)建腳本:
至于.Net 3.5和.Net 4.6有什么區(qū)別,如何創(chuàng)建dll等,我們將后續(xù)再做深入的探究。我們接著說如何創(chuàng)建一個腳本,不同于其他需要外部導入的資源,腳本文件我們可以直接在unity內部創(chuàng)建,在頂部的菜單欄中依次選擇assets-create-c# script,在project面板就可以看到剛才創(chuàng)建的新腳本文件:NewBehaviourScript。剛創(chuàng)建時,腳本的名稱呈高亮選中狀態(tài),這時是可以直接修改腳本名稱的,修改后腳本的類名也會同步更改,我們將名稱改為:MyTest
除了上面這種方式創(chuàng)建腳本文件,我們還可以直接在project面板下直接右鍵:create-c# script,或者在project頁簽下的create-c# script,一樣可以實現腳本的創(chuàng)建。
剖析腳本:
我們雙擊打開剛創(chuàng)建的腳本,因為我們之前設置關聯了VisualStudio(以下簡稱VS),因此我們的腳本將會默認使用VS打開。腳本的初始內容如下:
using UnityEngine;
public class MyTest : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
語句using UnityEngine; 引用了UnityEngine的命名空間,這樣我們才可以使用Unity引擎的內建類和方法。
MonoBehaviour屬于引擎的內建類,我們新建的類繼承于它,這樣這個新建類就擁有了Unity引擎的一些特性能力,比如可以讓這個腳本作為一個組件掛載到一個游戲對象上。需要注意的是,創(chuàng)建時的腳本名和類名必須一致,這樣才能讓這個腳本掛載到游戲對象上。
當然我們可以進一步剖析,鼠標點擊Monobehaviour,右鍵轉到定義(或者直接按鍵盤的F12鍵,在Mac系統(tǒng)上的VS是花鍵加D,這是一個最常用的功能,以后會頻繁用到),這樣我們就可以追溯這個類的結構。
進入MonoBehaviour類后我們可以發(fā)現這個類是由Behaviour派生而來,同樣,我們可以F12繼續(xù)追溯,Behaviour是有Component派生而來,這就很好的說明了為什么這個Monobehaviour類也是一個組件了。繼續(xù)追溯,Component是由Object派生而來,而Object之上就沒法繼續(xù)追溯了,我們知道,在C#的同一類型系統(tǒng)中,Object就是造物主,所有類型(預定義類型,用戶定義類型,引用類型和值類型)都是直接或者間接從Object繼承的。關系圖如下:
第8-15行,這里有兩個函數:Start()和Update(),這倆也是unity引擎的內建函數,當然這里還涉及到一個周期函數的知識點,我們后面會詳細剖析。在這兩函數中我們可以添加自己的代碼,比如在Start()方法中我們添加程序的一些初始化代碼,像一些賦值操作,讀取歷史數據等等,在Update()方法中添加游戲對象每一幀的移動邏輯以及響應用戶的輸入等。
使用腳本:
我們上面創(chuàng)建的腳本在掛載到游戲對象上之前是不會有任何作用的,這時如果按下運行,什么也不會發(fā)生。如果我們希望腳本能驅動游戲對象來做點什么,那么我們就需要把這個腳本掛載到游戲對象上,我們可以將這個腳本掛載到Hierachy面板中的Main Camera上,將腳本直接拖放到Main Camera對象上,或者選中Main Camera然后點擊insperctor面板的最底部Add Component按鈕進行添加。如下圖:
添加完成后,若此時我們運行程序,也是沒有任何反應的,因為我們代碼里并沒有讓unity做點什么。雙擊打開我們創(chuàng)建的那個腳本,然后在start()方法中,我們添加這樣一句:Debug.Log(“Hello,world !”);并保存,Update我們用不到,就先刪除它(注意,如果腳本中有沒用到的空的update函數請及時清理掉,因為unity的機制會讓它消耗一定的額外開銷,即使很小,但是如果你的項目很大,你創(chuàng)建了成千上萬個的時候,就不是一回事了,總之需要注意下這些小細節(jié))。
using UnityEngine;
public class MyTest : MonoBehaviour {
void Start () {
Debug.Log("Hello,world !");
}
}
Debug.Log();方法可以讓Unity的Console上打印出我們約定的消息。如果這時我們按下運行,我們就可以在最底部的Console上看到:Hello world !如果沒看到Console,我們可以在頂部的菜單欄:Window-Console來呼出Console。
使用Debug類:
Debug類也是unity的內建類,當然這個類的作用不能等同于vs的斷點debug,這是兩碼事。使用debug.log可以靈活的在任意我們想要的地方打印出日志,特別是在運行時可以實時輸出我們想要的信息,在做一些簡單的調試時,使用debug.log可以大大提高效率。下面列出一些基本的用法:
1.直接打印字符串:
Debug.Log("這是一條普通的Log信息");
2.字符串和變量組合:
int speed = 10;
Debug.Log("當前速度為:" + speed);
3.給字符串添加顏色標示:
Debug.Log("<color=red> 這是紅色的Log </color>");
4.打印警示:
Debug.LogWarning("這是一個警告Log!");
5.標示錯誤警告。這里需要說明的是,盡管打印了錯誤警告,但是并不會影響程序的運行,因為這個只是一個日志信息而已。
Debug.LogError("這是一個ERROR警告!");
總結
以上是生活随笔為你收集整理的属性面板 脚本_3.1 创建和使用脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果向用户发出警告:不要睡在正在充电的i
- 下一篇: 请及时清理,研究称 95% 的智能手表表