ก่อนอื่นก็ ลบ บทที่ 3 ก่อนนะครับ ซึ่ง
ในที่นี้ผมจะ เริ่มใหม่แต่ยังไง Class TestGame และ MyPawn และ MyController ของผมอยู่
ซึ่งจะเปลี่ยนตรง TestGame ของผม ให้เป็น
โล่งๆแบบนี้อีกรอบนึง
ทีนี้ผมจะทำการ สร้าง function ชื่อว่า addbot
function addbot(){
}
ให้คุณไปสร้าง file ข้างนอกอีกตัว ชื่อว่า MyBot แล้วทำการ save เป็น .uc
แล้วก็เข้ามาครับ เข้ามาที่ MyBot แล้วทำการสร้าง Class MyBot
Class MyBot Extends GamePawn;
แล้วก็ทำการ Copy ในส่วนของ DefaultProperties มาครับ
DefaultProperties
{
Begin Object Name=CollisionCylinder
CollisionRadius=+0070.000000
CollisionHeight=+0045.000000
BlockZeroExtent=false
End Object
Begin Object Class=DynamicLightEnvironmentComponent Name=env
bIsCharacterLightEnvironment=TRUE
End Object
Components.Add(env)
LightEnvironment=env
Begin Object Class=SkeletalMeshComponent Name=Robot
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
LightEnvironment=env
AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
End Object
Mesh=Robot
Components.Add(Robot)
bBlockActors=false
}
ให้ตัด ControllerClass ออกไปก่อนเพื่อจะมาทดสอบว่าตัวละครที่เรา add มามันออกมาหรือไม่
ดังนั้นกลับมาที่ file TestGame ครับแล้วเพิ่มใน function addbot() ให้เพิ่มข้างในนะครับ เพิ่มลงไป
Spawn(class'MyBot',,,vect(0,0,260),);
ก็จะได้
อั่นแนะมันยังไม่ออก ให้ใช้ auto state ก็ได้ในการ เรียก function นี้หรือว่าจะใช้
event PostBeginPlay(){
super.PostBeginPlay();
addbot(); // เรียก function addbot ทำงาน
}
หลังจากนั้นจะได้ภาพที่เห็น
ผมจะให้มันลอยยังงี้ก่อนนะครับเพราะว่าเอาไว้เช็คว่ามีการ ใส่การควบคุม หรือ Control รึยังนะครับ
มาเรามาต่อกันที่ UDKBot นะครับ
สร้าง file มาอีกหนึ่ง file ชื่อว่า BotController ครับ แล้วกระทำการ save เป็น .uc แล้วก็เข้าไปใน file ไปแก้
ไข โดยสร้าง Class ชื่อว่า BotController โดยการ Extends เป็น UDKBot ครับ
เมื่อเสร็จแล้ว ให้ทำการ
สร้าง event Possess ครับ event ตัวนี้จะคล้ายๆให้บอทมีการสวมใส่วิญญาณของมันครับ
อ่ะโดยการ สร้างมันเลยครับ parameter ตัวแรกจะเป็น pawn และตัวที่สองจะเป็น bool ครับ
event Possess(Pawn iP, bool bV){
super.Possess(iP,bV);
Pawn.setMovementPhysics();
}
ครับแล้วลองรันเกมดู
นั่นมันตกลงมาแล้วววว
จริงๆเมื่อ Pawn มาแล้วมันมีเลือดด้วยนะ
อันนี้ผมสร้าง auto state ขึ้นมาเขียนคำสั่ง Worldinfo.game.broadcast(self,string(health));
ขึ้นมาโชว์ แต่ผมพิมพ์ใน class MyBot นะ
auto state shouthealt{
begin:
worldinfo.Game.Broadcast(self,string(health));
}
เดี๋ยวเรามาต่อบทที่ 4.2 กันดีกว่า การ Take Damage
สรุป
Spawn เป็น Function ที่ใช้ในการเชื่อมต่อ Class ครับและสามารถใช้คู่กับ Pawn ได้อย่างเข้ากันเลยทีเดียวครับ โดยจะมี parameter ที่คอยกำหนด location และ rotation ครับ
Possess นั้นเป็น function ที่คอยแบบว่าใส่จิตวิญญารให้ เจ้า Controller หรือบอท แม้กระทั้ง Player
setMovementPhysics จะเป็น function ที่กำหนด physic ให้เจ้า bot ของเราครับ เพราะ UDKbot แตกต่างจาก PlayerController ซึ่ง Player หมายถึงเรา Bot หมายถึงสิ่งที่ไม่มีคนควบคุม
bBlockActors คือการให้ต้องการวิ่งผ่าน Collision ที่ตั้งขึ้นหรือไม่ ถ้า true ก็คือ ไม่่ให้นะครับ แต่ถ้า false
คือมันจะไม่ block ก็คือวิ่งผ่านไปได้ครับ
ในที่นี้ผมจะ เริ่มใหม่แต่ยังไง Class TestGame และ MyPawn และ MyController ของผมอยู่
ซึ่งจะเปลี่ยนตรง TestGame ของผม ให้เป็น
Class TestGame extends gameinfo;
defaultproperties
{
bRestartLevel=false;
bDelayedStart=false;
PlayerControllerClass=class'MyController'
DefaultPawnClass=class'MyPawn'
}
โล่งๆแบบนี้อีกรอบนึง
ทีนี้ผมจะทำการ สร้าง function ชื่อว่า addbot
function addbot(){
}
ให้คุณไปสร้าง file ข้างนอกอีกตัว ชื่อว่า MyBot แล้วทำการ save เป็น .uc
แล้วก็เข้ามาครับ เข้ามาที่ MyBot แล้วทำการสร้าง Class MyBot
Class MyBot Extends GamePawn;
แล้วก็ทำการ Copy ในส่วนของ DefaultProperties มาครับ
DefaultProperties
{
Begin Object Name=CollisionCylinder
CollisionRadius=+0070.000000
CollisionHeight=+0045.000000
BlockZeroExtent=false
End Object
Begin Object Class=DynamicLightEnvironmentComponent Name=env
bIsCharacterLightEnvironment=TRUE
End Object
Components.Add(env)
LightEnvironment=env
Begin Object Class=SkeletalMeshComponent Name=Robot
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
LightEnvironment=env
AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
End Object
Mesh=Robot
Components.Add(Robot)
bBlockActors=false
}
ให้ตัด ControllerClass ออกไปก่อนเพื่อจะมาทดสอบว่าตัวละครที่เรา add มามันออกมาหรือไม่
Class MyBot Extends GamePawn;
DefaultProperties
{
Begin Object Name=CollisionCylinder
CollisionRadius=+0070.000000
CollisionHeight=+0045.000000
BlockZeroExtent=false
End Object
Begin Object Class=DynamicLightEnvironmentComponent Name=env
bIsCharacterLightEnvironment=TRUE
End Object
Components.Add(env)
LightEnvironment=env
Begin Object Class=SkeletalMeshComponent Name=Robot
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
LightEnvironment=env
AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
End Object
Mesh=Robot
Components.Add(Robot)
bBlockActors=false
}
ดังนั้นกลับมาที่ file TestGame ครับแล้วเพิ่มใน function addbot() ให้เพิ่มข้างในนะครับ เพิ่มลงไป
Spawn(class'MyBot',,,vect(0,0,260),);
ก็จะได้
Class TestGame extends gameinfo;แล้วลองรันดู
function addbot(){
Spawn(class'MyBot',,,vect(0,0,260),);
}
defaultproperties
{
bRestartLevel=false;
bDelayedStart=false;
PlayerControllerClass=class'MyController'
DefaultPawnClass=class'MyPawn'
}
อั่นแนะมันยังไม่ออก ให้ใช้ auto state ก็ได้ในการ เรียก function นี้หรือว่าจะใช้
event PostBeginPlay(){
super.PostBeginPlay();
addbot(); // เรียก function addbot ทำงาน
}
Class TestGame extends gameinfo;
event PostBeginPlay(){
super.PostBeginPlay();
addbot();
}
function addbot(){
Spawn(class'MyBot',,,vect(0,0,260),);
}
defaultproperties
{
bRestartLevel=false;
bDelayedStart=false;
PlayerControllerClass=class'MyController'
DefaultPawnClass=class'MyPawn'
}
หลังจากนั้นจะได้ภาพที่เห็น
ผมจะให้มันลอยยังงี้ก่อนนะครับเพราะว่าเอาไว้เช็คว่ามีการ ใส่การควบคุม หรือ Control รึยังนะครับ
มาเรามาต่อกันที่ UDKBot นะครับ
สร้าง file มาอีกหนึ่ง file ชื่อว่า BotController ครับ แล้วกระทำการ save เป็น .uc แล้วก็เข้าไปใน file ไปแก้
ไข โดยสร้าง Class ชื่อว่า BotController โดยการ Extends เป็น UDKBot ครับ
เมื่อเสร็จแล้ว ให้ทำการ
สร้าง event Possess ครับ event ตัวนี้จะคล้ายๆให้บอทมีการสวมใส่วิญญาณของมันครับ
อ่ะโดยการ สร้างมันเลยครับ parameter ตัวแรกจะเป็น pawn และตัวที่สองจะเป็น bool ครับ
event Possess(Pawn iP, bool bV){
super.Possess(iP,bV);
Pawn.setMovementPhysics();
}
ครับแล้วลองรันเกมดู
นั่นมันตกลงมาแล้วววว
จริงๆเมื่อ Pawn มาแล้วมันมีเลือดด้วยนะ
อันนี้ผมสร้าง auto state ขึ้นมาเขียนคำสั่ง Worldinfo.game.broadcast(self,string(health));
ขึ้นมาโชว์ แต่ผมพิมพ์ใน class MyBot นะ
auto state shouthealt{
begin:
worldinfo.Game.Broadcast(self,string(health));
}
เดี๋ยวเรามาต่อบทที่ 4.2 กันดีกว่า การ Take Damage
สรุป
Spawn เป็น Function ที่ใช้ในการเชื่อมต่อ Class ครับและสามารถใช้คู่กับ Pawn ได้อย่างเข้ากันเลยทีเดียวครับ โดยจะมี parameter ที่คอยกำหนด location และ rotation ครับ
Possess นั้นเป็น function ที่คอยแบบว่าใส่จิตวิญญารให้ เจ้า Controller หรือบอท แม้กระทั้ง Player
setMovementPhysics จะเป็น function ที่กำหนด physic ให้เจ้า bot ของเราครับ เพราะ UDKbot แตกต่างจาก PlayerController ซึ่ง Player หมายถึงเรา Bot หมายถึงสิ่งที่ไม่มีคนควบคุม
bBlockActors คือการให้ต้องการวิ่งผ่าน Collision ที่ตั้งขึ้นหรือไม่ ถ้า true ก็คือ ไม่่ให้นะครับ แต่ถ้า false
คือมันจะไม่ block ก็คือวิ่งผ่านไปได้ครับ
2 ความคิดเห็น:
อะ ผมสงใสอย่างเราสามารถสร้างบอทได้กี่ตัวครับ
ผมอยากบอทสัก100ตัวนี้ต้องทำไงครับ
ได้เลื่อยๆ ครับ จนกว่า เครื่องของคนเล่นจะรับไม่ครับ ฮ่าๆๆๆๆๆๆๆ
แสดงความคิดเห็น