สร้างไอเท็มกินโลก
7 นาที
ตัวอย่างโครงการ
📘 ไฟล์โครงการที่ใช้ในบรรยาย
สรุป
สรุป | จากสิ่งที่เราเรียนรู้ในบทที่ 1 เราจะสร้างโลกที่มีไอเท็มกินได้โดยใช้ความเร็วในการเคลื่อนที่ของตัวละครและการควบคุมการกระโดด. |
|---|---|
ความยาก | ระดับเริ่มต้น |
เวลาที่ต้องใช้ | 30 นาที |
เป้าหมายของโครงการ
- การจัดการการซื้อสินค้าผ่านเหตุการณ์ OnTrigger
- เข้าใจวิธีการใช้ Text UI
- สร้าง UI Controller เพื่อสะท้อนการซื้อสินค้าใน Text UI
- เข้าใจวิธีการควบคุมความสูงของการกระโดดของตัวละคร ZEPETO
- เข้าใจวิธีการควบคุมความเร็วในการเคลื่อนที่ของตัวละคร ZEPETO
🎬 วิดีโอของโลกที่เสร็จสมบูรณ์
สคริปต์
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import { SpawnInfo, ZepetoPlayers, LocalPlayer, ZepetoCharacter } from 'ZEPETO.Character.Controller'
import { WorldService } from 'ZEPETO.World';
export default class CharacterController extends ZepetoScriptBehaviour {
Start() {
//Gets the UserId (logged in through Editor)
ZepetoPlayers.instance.CreatePlayerWithUserId(WorldService.userId,new SpawnInfo(), true);
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
let _player : LocalPlayer = ZepetoPlayers.instance.LocalPlayer;
});
}
} import { Collider, Vector3, GameObject, Transform } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayer, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour, ZepetoScriptInstance } from 'ZEPETO.Script';
// import custom script from path
import UIController from './UIController';
export default class GetItem extends ZepetoScriptBehaviour
{
public extComponentGameObject: GameObject;
private extComponent: UIController;
private zepetoCharacter: ZepetoCharacter;
Start()
{
//Zepeto character object
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
});
//script import
this.extComponent = this.extComponentGameObject.GetComponent<UIController>();
}
OnTriggerEnter(collider: Collider)
{
if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
return;
//Sends a message of raising a count after eating an item
this.extComponent.IncreaseCount();
//Destroy item
GameObject.Destroy(this.gameObject);
}
}import { Collider } from 'UnityEngine';
import { ZepetoPlayers, ZepetoCharacter } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
export default class JumpPower extends ZepetoScriptBehaviour
{
public jumpPower: number = 5;
private zepetoCharacter :ZepetoCharacter;
Start()
{
//วัตถุของตัวละคร Zepeto
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
});
}
OnTriggerEnter(collider: Collider)
{
if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
return;
//เพิ่มพลังกระโดด
this.zepetoCharacter.additionalJumpPower = this.jumpPower;
}
OnTriggerExit(collider: Collider) {
//คืนพลังกระโดดกลับเป็นปกติ
this.zepetoCharacter.additionalJumpPower = 0;
}
}import { Collider, GameObject, WaitForSeconds } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
export default class SpeedUp extends ZepetoScriptBehaviour
{
private zepetoCharacter :ZepetoCharacter;
public runSpeed: number = 4;
public waitTime: number = 3;
Start()
{
//วัตถุของตัวละคร Zepeto
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
});
}
OnTriggerEnter(collider: Collider)
{
if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
return;
this.zepetoCharacter.additionalRunSpeed = this.runSpeed;
this.StartCoroutine(this.DoRoutine());
}
*DoRoutine()
{
//รอเวลาตามค่าที่กำหนด
yield new WaitForSeconds(this.waitTime);
//คืนความเร็วในการวิ่งกลับเป็นปกติ
this.zepetoCharacter.additionalRunSpeed = 0;
}
}import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Text } from "UnityEngine.UI";
import { GameObject } from 'UnityEngine';
export default class UIController extends ZepetoScriptBehaviour
{
public resultUI: Text;
public maxCount: number = 7;
private stringProperty: string;
private message: string;
private count: number;
Start()
{
//กำหนดค่าเริ่มต้น
this.message = "รายการ";
this.count = 0;
}
public IncreaseCount()
{
this.count++;
if(this.count >= this.maxCount)
{
this.resultUI.text = "เคลียร์!";
}
else
{
this.stringProperty = `${this.message} : ${this.count}`;
this.resultUI.text = this.stringProperty;
}
}
}