朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊|登陸

等待

返回 展開菜單

UDK補充性腳本

vegas剪輯 觀看預(yù)覽

vegas剪輯

包含3節(jié)視頻教程
關(guān)注4.5萬

vegas視頻非線編輯軟件是非常高效實時的非編軟件。學(xué)會他,你將會對所有的視頻不再陌生,你可以任意的剪輯影片。操作視頻片段,制作你自己的動畫!

關(guān)閉

補充性腳本
創(chuàng)建自定義Kismet循序?qū)ο?

關(guān)卡設(shè)計師時而會遇到這種尷尬情況:您想運用Kismet進行一些工作,但目標(biāo)卻超出了默認(rèn)的節(jié)點設(shè)置能力范圍。此時,若您知道怎樣編寫循序?qū)ο髞韺崿F(xiàn)各種功能,就變得有用了。所幸在UnrealScript中,這一步驟變得易如反掌。誠然,本書的目的不注重于使用Unreal的編碼功能,但是考慮到此話題十分有用,我們決定先為您舉一個簡單的例子來啟發(fā)一下。

若您覺得此篇指南頗有價值,而且也愿意投入時間來拓展自己的編程技能,您就會發(fā)現(xiàn),開發(fā)自己的Kismet節(jié)點可以大有成就。

在這個簡單示例中,我們要創(chuàng)建一個數(shù)學(xué)節(jié)點對兩個浮點變量進行加、減、乘、除的運算。本指南會將創(chuàng)建工作分解為包含腳本各個方面的幾個步驟,每一節(jié)中創(chuàng)建的腳本都帶有描述文字,說明此節(jié)腳本的功用。

然而,正如上文所述,本書的目的并不在于使您成為一個腳本編寫專家。即使從未進行過編程工作,您還是可以跟上本指南進度的。不過在對編程常識一無所知的情況下,確實會無法完全掌握本篇指南所傳授的技巧。

指南A.1——創(chuàng)建自定義Kismet循序?qū)ο螅谝徊糠郑?/h6>
初始腳本組件

注意:為順利完成本指南的工作,您需要一個文本編輯程序,比如Windows自帶的記事本(Notepad)或者ConTEXT。

1.首先,請打開文本編輯程序。

2. 鍵入下列文本:

class SeqAct_MathOperations extends SequenceAction;

語句的第一行為循序?qū)ο髣?chuàng)建了新的類(Class)。這個類應(yīng)命名為SeqAct_MathOperations它來自于Kismet循序?qū)ο笾饕念悺猄equenceAction類。切記在句末加上分號。切記切記!

3.為了便于閱讀在此新添一行然后鍵入下列文本:

enum Operation

{

OPER_Add,

OPER_Subtract,

OPER_Multiply,

OPER_Divide

};

此節(jié)代碼創(chuàng)建了一個enumerator(稱為Operation),它可以保存每一個數(shù)學(xué)運算的名稱。對于運算本身而言,這些名稱毫無用處。您可以把它們看作是一張用戶可見的列表,以便使用戶了解正在執(zhí)行的運算操作。切記在實際列表的開始和完結(jié)處都要使用大括號,并在第二個大括號之后使用分號!

4 現(xiàn)在我們來創(chuàng)建用于腳本的變量。在enumerator大括號下面幾行,添加以下文本。

Var () Float A B;

var Float Result;

var () Operation MathOperation;

第一行創(chuàng)建了名稱為A和B的兩個變量。在“var”之后加上的左右圓括號表明此類變量是可編輯的,意味著這些變量正在等待某種輸入。這些變量是浮點,也就是帶有小數(shù)點的數(shù)字。請注意在語句結(jié)束處加上分號。

第二行創(chuàng)建了另一個名為Result的變量。該變量是不可編輯的。這也是為什么語句開頭沒有左右圓括號的原因。它不需要進行編輯,僅僅因為它不需要編輯(沒有別的理由)。運算結(jié)果將作為節(jié)點行為的結(jié)果而創(chuàng)建出來。您當(dāng)然不希望數(shù)學(xué)問題的答案是可編輯的。再一次提醒您:在末尾加上分號。

第三行創(chuàng)建了第四個變量,名稱為MathOperation。此變量從列表中調(diào)用Operation enumerator(運算計數(shù)器)來保存其中的一次運算。然而,除非我們使用執(zhí)行功能,否則此次操作不會產(chǎn)生任何效果。

5. 現(xiàn)在請保存您的文檔文件。此時,文件名稱無關(guān)緊要,只要保存該文件以防丟失。

指南A.2——創(chuàng)建自定義Kismet循序?qū)ο,第二部分?/h6>
設(shè)置默認(rèn)屬性

1. 打開指南A.1中的文本文件。請?zhí)砑訋仔锌招幸粤粜┛臻g,因為我們要在本節(jié)指南中學(xué)習(xí)腳本的功能(functionality)。

2. 鍵入下列文本:

defaultproperties

{

}

本語句創(chuàng)建了包含屬性的腳本部分。

注意:在本節(jié)指南中每隔一行的語句都要輸入在大括號內(nèi)。

3. 在大括號中加入下列語句:

defaultproperties

{

ObjName=”O(jiān)perations”

ObjCategory=”MasteringUnreal”

}

第一行創(chuàng)建了在Kismet右鍵關(guān)聯(lián)菜單中出現(xiàn)的本循序?qū)ο蟮拿Q。在此情況下,列表中出現(xiàn)的節(jié)點就是Operations的形式。

第二行指定了將會出現(xiàn)循序?qū)ο蟮念悇e。在此情況下,它會成為一個叫做MasteringUnreal的新類別。

4. 在“ObjCategory=”MasteringUnreal””的下面一行添加以下語句:

defaultproperties

{

ObjName=”O(jiān)perations”

ObjCategory=”MasteringUnreal”

OutputLinks(0) = (LinkDesc=”O(jiān)ut”)

}

這一行語句為節(jié)點創(chuàng)建了一個命名為Out的單獨輸出鏈接。我們無需創(chuàng)建一個輸入鏈接,因為它繼承了原始類(class)的數(shù)據(jù)。理論上,我們可以在(0)的位置用與(1)相似的語句行添加出更多的輸出鏈接。

5. 在“OutputLinks(0) = (LinkDesc=”O(jiān)ut”)”的下面一行添加下列語句:

defaultproperties

{

ObjName=”O(jiān)perations”

ObjCategory=”MasteringUnreal”

OutputLinks(0) = (LinkDesc=”O(jiān)ut”)

VariableLinks.Empty

VariableLinks(0) = (ExpectedType=class’SeqVar_Float’LinkDesc=”A”PropertyName=A)

VariableLinks(1) = (ExpectedType=class’SeqVar_Float’LinkDesc=”B”PropertyName=B)

VariableLinks(2) = (ExpectedType=class’SeqVar_Float’LinkDesc=”Result”bWriteable=TruePropertyName=Result)

}

第一行用于移除可能會與原始類同時出現(xiàn)的任何變量鏈接信息。

第二行用于創(chuàng)建首個變量鏈接。我們建立了該變量所需的數(shù)據(jù)類型,此處即浮點。我們還要創(chuàng)建一個該鏈接出現(xiàn)時的名稱,命名為A。最后,我們要在腳本中建立一個變量,當(dāng)我們向變量鏈接發(fā)送信息時,就在腳本中寫入此變量。

第三行是對第二行的復(fù)制。將LinkDesc和PropertyName屬性從原來的A設(shè)置為B。這樣就非常簡便地創(chuàng)建了第二個變量鏈接。

第四行是對第三行的復(fù)制,將LinkDesc和PropertyName屬性再次改變?yōu)镽esult,添加bWriteable(可寫入)屬性并將其設(shè)置成true(是)。這一點對于允許腳本對變量具有寫入功能是非常重要的。

6.保存您的文本文件。

指南A.3——創(chuàng)建自定義Kismet循序?qū)ο,第三部分:添加功?

1. 打開已存檔的文本文件。

2. 在變量列表的下方,defaultproperties(默認(rèn)屬性)一行的上方,添加下列語句:

event Activated()

{

}

我們利用Activated(已激活)事件來設(shè)定功能框架。我們可以使用此事件是因其衍生自SequenceAction(循序動作) 類。這基本上意味著:由于在Kismet中插入一個事件,那么無論何時發(fā)送一個信號到該節(jié)點上,都將運行大括號中的任何代碼。

3. 在大括號中,添加下列語句:

event Activated()

{

switch (MathOperation)

{

}

}

我們現(xiàn)在正在新建一個基于MathOperation變量的開關(guān)/案例(switch/case)陳述。現(xiàn)在不必?fù)?dān)心此步驟的真實意義(下文中會進行解釋);只要牢記此陳述在“event Activated()”行中有其自身的大括號分層就可以了。

4. 現(xiàn)在我們要創(chuàng)建出一個運算行為,決定從enumerator列表中選中OPER_Add時產(chǎn)生的狀況。

Event Activated()

{

switch (MathOperation)

{

case OPER_Add:

Result=A+B;

break;

}

}

這幾行的作用是當(dāng)用戶選擇了加法運算時,與之掛鉤的運算行為。請注意在“case OPER_ADD”一行后面有一個冒號(而不是分號)。還有一個“break”(中斷)陳述位于數(shù)學(xué)等號的后面。這樣就防止了在加法運算發(fā)生完畢后,其它的后續(xù)數(shù)學(xué)運算對此變量執(zhí)行任何操作。

5. 現(xiàn)在需要為另一個數(shù)學(xué)運算設(shè)定以下行為。請?zhí)砑酉铝姓Z句:

注意:利用復(fù)制/粘貼,來處理下面幾行語句是最便捷的!

event Activated()

{

switch (MathOperation)

{

case OPER_Add:

Result=A+B;

break;

case OPER_Subtract:

Result=A-B;

break;

case OPER_Multiply:

Result=A*B;

break;

case OPER_Divide:

Result=A/B;

break;

default:

Result=0;

break;

}

}

這些語句為接下來的數(shù)學(xué)運算建立了運算行為。請注意在最后又添加了一個默認(rèn)案例,這是預(yù)防當(dāng)事件中出現(xiàn)某些錯誤時,將Result變量值設(shè)回默認(rèn)值0。

6. 若您沒有保持高度注意力,下面的部分會變得很難理解。我們需要在Switch大括號的后方、event大括號的前方添加一些行為代碼,允許原始類(original class)執(zhí)行某些功能,并通過節(jié)點發(fā)送出任何必要的信息。鍵入下列語句:

注意:在此步驟中,您要添加的只有最底部的語句。其它的代碼都是為了使我們的思路更為清晰而從上一語句章節(jié)中復(fù)制而來的。

event Activated()

{

switch (MathOperation)

{

case OPER_Add:

Result=A+B;

break;

case OPER_Subtract:

Result=A-B;

break;

case OPER_Multiply:

Result=A*B;

break;

case OPER_Divide:

Result=A/B;

break;

default:

Result=0;

break;

}

Super.Activated();

PopulateLinkedVariableValues();

OutputLinks[0].bHasImpulse=True;

}

第一行“Super.Activated()”,使得原始類(original class)執(zhí)行為了讓一切運算順利進行的任意必要功能。

第二行語句會向Kismet序列中的已鏈接變量發(fā)送出之前創(chuàng)建的數(shù)學(xué)運算結(jié)果的變量值?梢詫⑵淇醋鳛槭歉翶ismet編輯器中附屬于該節(jié)點的任何變量。

第三行語句僅是用于激活與該特定節(jié)點的Out輸入相連接的任意節(jié)點。

7. 腳本編輯已經(jīng)完成了(當(dāng)然如果有打字錯誤就不算了)。若存在一些Bug,請不要擔(dān)心。Unreal會在稍后匯編時向您顯示出產(chǎn)生錯誤的地方,所以您能夠很容易的回頭來修復(fù)它們。

保存您的文本文件。

最終的腳本應(yīng)如下所示:

class SeqAct_MathOperations extends SequenceAction;

enum Operation

{

OPER_Add,

OPER_Subtract,

OPER_Multiply,

OPER_Divide

};

var () Float A B;

var Float Result;

var () Operation MathOperation;

event Activated()

{

switch (MathOperation)

{

case OPER_Add:

Result=A+B;

break;

case OPER_Subtract:

Result=A-B;

break;

case OPER_Multiply:

Result=A*B;

break;

case OPER_Divide:

Result=A/B;

break;

default:

Result=0;

break;

}

Super.Activated();

PopulateLinkedVariableValues();

OutputLinks[0].bHasImpulse=True;

}

defaultproperties

{

ObjName=”O(jiān)perations”

ObjCategory=”MasteringUnreal”

OutputLinks(0) = (LinkDesc=”O(jiān)ut”)

VariableLinks.Empty

VariableLinks(0) = (ExpectedType=class’SeqVar_Float’LinkDesc=”A”PropertyName=A)

VariableLinks(1) = (ExpectedType=class’SeqVar_Float’LinkDesc=”B”PropertyName=B)

VariableLinks(2) = (ExpectedType=class’SeqVar_Float’LinkDesc=”Result”bWriteable=TruePropertyName=Result)

}

指南A.4——創(chuàng)建自定義Kismet循序?qū)ο蟮谒牟糠郑罕4嬷罸nrealScript并調(diào)整.INI文件

1. 繼續(xù)前一指南,打開您的文本文件。

2. 第一步是保存文件,使Unreal懂得這是一個待編輯的UnrealScript。首先打開文本編輯器的Save(保存)對話框。打開位于UnrealEngine3安裝目錄下的Src文件夾。在此文件夾內(nèi),新建一個命名為MasteringUnreal的文件夾。打開這個子文件夾,再創(chuàng)建另一個文件夾并命名為Classes。打開最后這個文件夾,將您的文件保存為SeqAct_MathOperations.uc。

您的最終路徑可能如下顯示:

C:UnrealEngine3DevelopmentSrcMasteringUnrealClassesSeqAct_MathOperations.uc

注意:最終的文件名稱必須與腳本創(chuàng)建伊始時的類名稱保持一致。并且注意在該文件名的后綴名是.UC!請勿將您的文件保存為TXT 格式的文件。

3. 現(xiàn)在需要調(diào)整ExampleEngine.INI文件。不過首先還是要確保無論是《Unreal》游戲還是UnrealEngine3 都不在運行狀態(tài)。若正在運行,就會覆蓋您的所有更改!

4. 打開ExampleEngine.INI文件,該文件應(yīng)該存放在您的UnrealEngine3 安裝目錄下的Config文件夾內(nèi)。

5. 在INI文件內(nèi),找到EditPackages 語句列表的位置。此處應(yīng)該有若干行語句,指定了當(dāng)Unreal啟動時自動加載的文件包名稱。在列表末端,插入下面的新語句:

EditPackages=MasteringUnreal

請注意這就是在Src文件夾內(nèi)創(chuàng)建的文件夾的名稱。保存然后關(guān)閉INI文件。

6. 運行UnrealEd。您會收到一條信息,警告腳本已過期。點擊Yes進行重建(rebuild)。

注意:若您的代碼中存在任何Bug,就會出現(xiàn)在重建窗口(rebuild window)中。

7. 若進展順利,您就可以運行UnrealEd了。右擊并從關(guān)聯(lián)菜單中選擇MasteringUnreal > Operations。如此,就在Kismet中創(chuàng)建了一個新的可用節(jié)點,可以連接任意的兩個值,也可以在節(jié)點屬性中改變數(shù)學(xué)運算。

<<<< 指南結(jié)束

以上述示例為基礎(chǔ),您就可以自行嘗試新建循序?qū)ο罅。若您計劃大量地使用循序(qū)ο蠊δ,那么在真實源代碼(Unreal游戲源代碼)中而非通過Unreal腳本中應(yīng)用循序?qū)ο髸鼮橛行А.?dāng)然,即便您無法獲得或者根本不想了解Unreal源代碼,腳本仍然可以為您提供一種快捷有效的接近游戲原型(prototype)的途徑來創(chuàng)建所需的循序?qū)ο蟆?/p>

指南A.5——創(chuàng)建一個可放置的WaterVolume(水體積)

Unreal使用WaterVolume(水體積)實現(xiàn)了玩家的隨意暢游,但在編輯器內(nèi)的默認(rèn)狀態(tài)下,volume(體積)是不可放置的。正因如此,創(chuàng)建出自定義的可放置WaterVolume class(水體積類)就變得極有必要,它從基礎(chǔ)WaterVolume(水體積)類別擴展而來的,并能將我們自己的WaterVolume(水體積)變得可放置。 這是一個非常簡單的過程,它僅僅只需要說明Placeable specifier的類別。而其他所有功能都繼承于這個基本類別。

若您不熟悉編輯腳本,不用擔(dān)心。您還是可以很容易的進行下列的設(shè)置:

1. 首先,確定您有一個文本編輯程序。一般來說,可以選擇使用ConTEX或者Notepad。它們中的任意一個都可以為我們所用。

2. 這個類別中的第一行就是對類別的說明。我們在此規(guī)定自定義WaterVolume(水體積)的名字,同樣還是從我們的類別延伸過來的,或者繼承了其功能的類別所在的地方,以及可以選擇添加的任意specifiers,例如前面提到的the Placeable specifier。輸入下列語句:

class MU_WaterVolume extends WaterVolume

從左到右,這一行首先規(guī)定了我們正在創(chuàng)建一個新的“類”。然后指定了這個新和類名稱MU_WaterVolume(水體積)。其中的關(guān)鍵字“extends”意味著,這個類別要繼承它的功能和成員,例如來自從另一個類別的變量和默認(rèn)屬性。接下來的是類別的名稱,WaterVolume(水體積),這個類別應(yīng)繼承于它。

3. 現(xiàn)在,按下回車鍵(Enter),進入下一行,輸入下列語句:

Placeable;

由于文本空格了好幾行,所以此處才是繼續(xù)之前輸入的編輯碼的第一行。用空格是為了閱讀更方便,我們交錯排列這一行,使它看起來更容易辨識為第一行的繼續(xù)。如此也就更容易確認(rèn)新類別的名稱和源類別,也不會和一堆specifiers擁擠在一起。

這一行告訴了Unreal:可以將這個類別放置在編輯器的地圖中。此行末尾是一個分號,意即這是一個執(zhí)行命令的結(jié)束。

4. 按兩次回車鍵,跳過一行,輸入下列語句:

defaultproperties

{

}

通常,這個默認(rèn)屬性部分,就是給從屬于類別的變量值賦上特別的初始值的地方。在我們的案例中,當(dāng)我們只是從源類別中繼承所有的值時,不會設(shè)置任何屬性。添加這一部分只是為了完成性,所以省略這一部分也不會造成任何問題。

5. 就編輯碼而言,這一是完成腳本的最后一步。您的最終腳本應(yīng)看起來像這樣:

class MU_WaterVolume extends WaterVolume

Placeable;

defaultproperties

{

}

6. 下一步即保存文件,使得Unreal將它編輯成一個腳本文件包或者.u文件。要達(dá)到這個目的,首先,您必須創(chuàng)建一對文件夾。找到位于UnrealEngine3安裝文件的Development目錄下的Src文件夾。在該文件中,創(chuàng)建一個文件夾,命名為MasteringUnreal,當(dāng)然,若已存在MasteringUnreal文件夾,就不需新建了。打開新的文件夾,創(chuàng)建另一個命名為Classes的文件夾,同上,若該文件夾已存在,也無須新建了。最后,保存文本文件至Classes文件夾中,并命名為MU_WaterVolume(水體積).uc。

該文件的最終路徑應(yīng)看起來如下:

C:UNrealEngine3DevelopmentSrcMasteringUnrealClassesMU_WaterVolume.uc

注:務(wù)必使該文件的名稱和創(chuàng)建的類別名稱一致,并讓該文件以.uc擴展名一起保存。只有這樣,Unreal才能識別該文件是一個需要編輯的腳本文件。

7. 現(xiàn)在,為了讓Unreal搜索您已創(chuàng)建的腳本,必須在ExampleEngine.ini文件中創(chuàng)建一個條目,在對該文件作出修改之前,您必須確定關(guān)閉了Unreal或者UnrealEd的所有內(nèi)存塊(instances),因為當(dāng)這些內(nèi)存塊運行時,它們會覆蓋您做的任何修改。

8. 打開ExampleEngine.ini文件,其位置在UnrealEngine3安裝文件中的Config文件夾內(nèi)。

9. 在這個文件中,找到EditPackages 條目所在的部分。該處會有一些條目說明了當(dāng)Unreal啟動時,會安裝哪一個文件包。更重要的是,當(dāng)發(fā)現(xiàn)有文件超過時效期時,這里列出的文件包將會進行編輯。也就意味著,UnrealScript (.uc)文件比同這些腳本結(jié)合的腳本文件包(.u)要新。

在最后一個EditPackages條目后面,插入一行新的語句:

EditPackages=MasteringUnreal

注:這里輸入的文件包的名稱,應(yīng)同保存.uc文件的Src文件夾內(nèi)創(chuàng)建的子文件夾名稱一致。

一旦創(chuàng)建了新的條目,保存并關(guān)閉ExampleEngine.ini文件。

10. 啟動UnrealEd。您會接受到一條消息,通知您腳本已過期,并詢問您要采取什么行動。點擊Yes重建Unreal,或者編輯腳本。由于只有存在新文件的文件包才會進行編輯,所以這一進程不會耗時太長。

注:若在編輯碼中存在任何漏洞或者錯誤,這個編輯窗口會告訴您它們的位置(文件名和第幾條命令行),以及漏洞和錯誤是什么。

11. 假設(shè)沒有任何錯誤,您現(xiàn)可以準(zhǔn)備啟動UnrealEd并檢測新的Volume。當(dāng)您右擊工具欄中Add Volume按鍵時,您會看到一個命名為MU_WaterVolume(水體積)的新Volume,當(dāng)進入該Volume時,玩家可以隨心暢游。

指南A.6——創(chuàng)建一個會爬梯子的自定義Pawn

默認(rèn)的Pawn類別不具備攀爬的能力。為了具備這樣的能力,必須創(chuàng)建一個新的Pawn類別,該類別繼承了默認(rèn)的Pawn類別,由于它在新的類中設(shè)定了默認(rèn)屬性,這就比Placeable WaterVolume(水體積)類別涉及的更多。

您若不熟悉編輯腳本,不用擔(dān)心。您還是可以很容易的進行下列的設(shè)置:

1. 首先,確定您有可用的文本編輯程序。一般來說,您可以選擇使用ConTEXT或者Notepad。它們中的任意一個都可以為我們的目的服務(wù)。

2. 這個類別中的第一行是對類別說明。這是我們指定自定義Pawn的名字的位置,同樣還是從我們的類別延伸過來的,或者繼承其功能的類別所在的地方。輸入下列語句:

class MU_Pawn extends ExamplePawn;

從左到右,這一行首先規(guī)定了我們正在創(chuàng)建一個新的“類”。然后指定類名稱為MU Pawn。關(guān)鍵字“extends”告訴關(guān)卡設(shè)計師,這個類別要繼承它的功能和成員,例如從另一個類別來的變量和默認(rèn)屬性。接下來的是類別的名稱,ExamplePawn,這個類別應(yīng)繼承于它。這一行結(jié)尾處是一個分號,它告訴了關(guān)卡設(shè)計師:這是這一條執(zhí)行命令的結(jié)束。

3. 按兩次回車鍵,跳過一行,然后輸入下列語句:

defaultproperties

{

}

通常,這個默認(rèn)屬性部分,就是給從屬于類別的變量值,賦予特別的初始值的地方。

4. 攀爬梯子的功能設(shè)置在Pawn類別中,但是,只有CanClimbLadders屬性設(shè)置為True(是),只有這樣才能激活該項功能,而事實上,CanClimbLadders屬性并未設(shè)置為True(是)。在defaultproperties部分,我們開始設(shè)置屬性。在{和}之間輸入下列語句:

defaultproperties

{

bCanClimbLadders=True

}

您也許注意到了,這一行語句結(jié)尾沒有分號。默認(rèn)屬性中的語句是不會以分號結(jié)尾的。您僅只需按回車鍵開始新的一行,以此表示執(zhí)行命令中的新語句。

5. 就編輯代碼而言,腳本已經(jīng)編輯完成了。您的最終腳本看起來應(yīng)像這樣:

class MU_Pawn extends ExamplePawn;

defaultproperties

{

bCanClimbLadders=True

}

6. 下一步就是保存文件,使得Unreal可以將它編輯成一個腳本文件包或者.u文件。要達(dá)到這個目的,您首先必須創(chuàng)建一對文件夾。找到位于UnrealEngine3安裝文件的Development目錄下的Src文件夾。在該文件中,創(chuàng)建一個文件夾,命名為MasteringUnreal,當(dāng)然,若已經(jīng)存在一個MasteringUnreal文件夾,就不用新建了。打開新的文件夾,新建另一個文件夾命名為Classes,同上,若該文件已經(jīng)存在,也就不用新建了。最后保存文本文件至Classes文件夾中,并命名為MU_Pawn.uc 。

文件的最終路徑應(yīng)看起來像這樣:

C:UNrealEngine3DevelopmentSrcMasteringUnrealClassesMU_Pawn.uc

注:務(wù)必要讓該文件的名稱和創(chuàng)建的類別名稱一致,并讓該文件以.uc擴展名一起保存,只有這樣才能讓Unreal識別該文件為一個需要編輯的腳本文件。

指南A.7——創(chuàng)建一個使用自定義Pawn的自定義Gametype

現(xiàn)在我們已經(jīng)創(chuàng)建了自定義的Pawn類別,我們需要找到一個方法,讓它能在游戲運行時,代替默認(rèn)的Pawn類別。我們要創(chuàng)建一個使用自定義Pawn類別的新游戲規(guī)則,然后把這個新游戲規(guī)則規(guī)定成當(dāng)游戲運行時默認(rèn)的游戲規(guī)則。

1. 打開文本編輯程序。

2. 這個類別中的第一行就是類別說明。我們在此指定自定義Pawn類別的名稱,同樣還是從我們的類別延伸過來的,或者繼承其功能的類別所在的位置,輸入下列語句:

class MU_GameInfo extends ExampleGameInfo;

從左到右,這一行首先規(guī)定了我們正在創(chuàng)建一個新的“類”。然后指定了該新類別的名稱MU GameInfo。關(guān)鍵字“extends”告訴關(guān)卡設(shè)計師,這個類別要繼承它的功能和成員,例如來自另一個類別的變量和默認(rèn)屬性。接下來的是類別的名稱,ExampleGameInfo,這個類別應(yīng)繼承于它。這一行結(jié)尾處是一個分號,它意味著:這是這一條執(zhí)行命令的結(jié)束。

3. 按兩次回車鍵,跳過一行,然后輸入下列語句:

defaultproperties

{

}

通常,這個默認(rèn)屬性部分,就是給從屬于類別的變量值,賦予特別的初始值的地方

4. 該屬性表明了使用Pawn類別的游戲規(guī)則叫做DefaultPawnClass。在defaultproperties部分內(nèi),我們來設(shè)置屬性。在{和}之間輸入下列語句:

defaultproperties

{

DefaultPawnClass=class'MasteringUnreal.MU_Pawn'

}

初看起來,這個語句的結(jié)構(gòu)讓人覺得難懂,實際上,它很明了。DefaultPawnClass變量是“類型”類,我們用下列的語句結(jié)構(gòu)來規(guī)定“類型”。

class'Package.Group.Name'

在我們的案例中,“package”是包含類別或者的腳本文件包的名稱,或者是MasteringUnreal的名稱!癎roup”是可選擇的參數(shù),因為并不是所有的內(nèi)容都回包含在一個Group里。自定義Pawn類別沒有任何的分組(Group),所以這里省略了!皀ame”就是這個類別的名稱,也即MU_Pawn。

5. 就編輯代碼而言,腳本已經(jīng)編輯完成了。您的最終腳本應(yīng)看起來像這樣:

class MU_ GameInfo extends ExampleGameInfo;

defaultproperties

{

DefaultPawnClass=class'MasteringUnreal.MU_Pawn'

}

6. 下一步是保存文件,使得Unreal可以將它編輯成一個腳本文件包或者.u文件。要達(dá)到這個目的,首先,您必須創(chuàng)建一對文件夾。找到位于UnrealEngine3安裝文件中Development目錄下的Src文件夾。在該文件中,創(chuàng)建一個文件夾,命名為MasteringUnreal,當(dāng)然,若已經(jīng)存在一個MasteringUnreal文件夾,就不用新建了。打開新的文件夾,新建另一個文件夾命名為Classes,同上,若該文件已經(jīng)存在,也就不用新建了。最后保存文本文件至Classes文件夾中,并命名為MU_GameInfo .uc。

文件的最終路徑應(yīng)看起來像這樣:

C:UNrealEngine3DevelopmentSrcMasteringUnrealClassesMU_GameInfo.uc

注:務(wù)必要讓該文件的名稱和創(chuàng)建的類別名稱一致,并讓該文件以.uc擴展名一起保存,只有這樣才能讓Unreal識別該文件為一個需要編輯的腳本文件。

7. 現(xiàn)在,為了讓Unreal知道去搜索您已創(chuàng)建的腳本,必須在ExampleEngine.ini文件中創(chuàng)建一個條目,在對該文件作出任何修改之前,確定關(guān)閉了Unreal或者UnrealEd的所有內(nèi)存塊(instances),因為當(dāng)這些內(nèi)存塊運行時,它們會覆蓋您做的所有修改。

8. 打開ExampleEngine.ini文件,其位置在UnrealEngine3安裝文件中的Config文件夾內(nèi)。

9. 在這個文件中,找到EditPackages 條目所在的部分。哪里會有一些已存在的條目說明了當(dāng)Unreal啟動時,會安裝哪一個文件包。更重要的是,當(dāng)發(fā)現(xiàn)有文件超過時效期時,這里列出的文件包將會進行編輯。這就意味著,UnrealScript (.uc)文件比同這些腳本結(jié)合的腳本文件包(.u)要新。若已經(jīng)有一個MasteringUnreal文件包條目在那個地方,就可以跳過這一步。

在最后一個EditPackages條目后面,插入一行新的語句:

EditPackages=MasteringUnreal

注:這里輸入的文件包的名稱,應(yīng)同保存.uc文件的Src文件夾內(nèi)創(chuàng)建的子文件夾名稱一致。

一旦創(chuàng)建了新的條目,就保存并關(guān)閉ExampleEngine.ini文件。

10. 啟動UnrealEd。您會接受到一條消息,通知您腳本已過期,并詢問您要采取什么行動。點擊Yes重建Unreal,或者編輯腳本。只有存在新文件的文件包才會進行編輯,所以這一進程不會耗時過長。

注:若在編輯碼中存在任何漏洞或者錯誤,這個編輯窗口會告訴您它們的位置(文件名和第幾條命令行),以及漏洞和錯誤是什么。

11. 假設(shè)沒有任何錯誤,您現(xiàn)在就可以設(shè)置默認(rèn)的游戲規(guī)則了。打開位于Config文件夾內(nèi)的ExampleGame.ini文件,找到一行包含下列內(nèi)容的命令行:

DefaultGame=ExampleGame.ExampleGameInfo

把這一行改成新的游戲規(guī)則的類別。完成后,它看起來應(yīng)該像這個樣子:

DefaultGame=MasteringUnreal.MU_GameInfo

保存并關(guān)閉該文件。

12. 現(xiàn)在您可以啟動UnrealEd。當(dāng)您玩到一個包含LadderVolumes的地圖時,玩家應(yīng)該就可以毫無困難的進行攀爬。

,
clarisse搭建3D天空之城拉普達(dá)全過程 clarisse搭建3D天空之城拉普達(dá)全過程

朱峰社區(qū)網(wǎng)頁版
朱峰社區(qū)網(wǎng)頁版(手機掃描-分享-添加到屏幕)


朱峰社區(qū)公眾號
朱峰社區(qū)微信公眾號(微信掃一掃-關(guān)注)

資源說明圖文教程無法下載,只能觀看圖片和文字。
版權(quán)規(guī)則本站圖文皆來自互聯(lián)網(wǎng)共享資源,如涉及到版權(quán)請查看版權(quán)規(guī)則。本平臺提供圖文僅可用于個人學(xué)習(xí),如用于商業(yè)請購買正版。您必須遵守的版權(quán)規(guī)則

未知用戶

未知用戶

2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號

回頂部

1.復(fù)制文本發(fā)給您的QQ好友或群、微信等;好友點擊鏈接以后,轉(zhuǎn)發(fā)就成功了。 2.如朋友點擊您的鏈接,您需要需刷新一下才行;同一個好友僅能點擊一次。
購買VIP,觀看所有收費教程!!