เริ่มกันเลยครับ
1. ให้ทำการ import model เข้ามานะครับ (ลาก Model เข้าใน Project Panel ได้เลย)
2. จากนั้นให้ทำการ Set Animation (จากบทความเก่า Setup Animation Macamin)
3. แล้วให้ทำการเปิดหน้าต่าง Animator โดยไปที่ Window => Animator
4. ให้ทำการลาก Animation ของ Character เข้าไปใน Animator (ตัวอย่างเป็น Animation idle, walk, run และ reload)
5. จากนั้นให้ทำการคลิกขวาเลือก Make Transition ที่ walking แล้วคลิกซ้ายที่ running
6. แล้วให้ทำการสร้าง Parameters โดยการคลิกปุ่ม "+" ด้านซ้ายล่างแล้วตั้งชื่อ speed(float) และ isReload(bool)
- idle -> walking set condition เป็น speed Greater 0
- idle <- walking set condition เป็น speed Less 0.1
- idle -> running set condition เป็น speed Greater 0.5
- idle <- running set condition เป็น speed Less 0.1
- walking -> runing set condition เป็น speed Greater 0.5
- walking <- running set condition เป็น speed Less 0.5
จากนั้นทำการประกาศตัวแปร และเพิ่มโค้ดตามด้านล่างครับ
ตัวแปรสำหรับ set animation
WALK_SPEED = 0.1f; // สำหรับ walk animation
RUN_SPEED = 0.6f; // สำหรับ run animation
ในส่วนของ Start() ได้ทำการ set ค่า default
ในส่วนของ Update()
ทำการรับ Input จาก player
moveDirection = Vector3.zero; // ทำการหยุดการเคลื่อนไหว
moveDirection.x = Input.GetAxis("Horizontal"); // รับ Horizontal Input
moveDirection.z = Input.GetAxis("Vertical"); // รับ Vertical Input
moveDirection = transform.TransformDirection(moveDirection); // เปลี่ยน local direction เป็น world direction
// กด Left Shift สำหรับ วิ่ง
if(Input.GetKey(KeyCode.LeftShift))
{
speed = runSpeed;
animatiorSpeed = RUN_SPEED;
}
else
{
speed = walkSpeed;
animatiorSpeed = WALK_SPEED;
}
SetAnimation(); // เรียกใช้ function SetAnimation
ในส่วนของ SetAnimation()
if(moveDirection == Vector3.zero)
{
// ถ้าไม่มีการเคลื่อนที่ เล่น idle animation
animator.SetFloat("speed", 0f);
}
else
{
// เล่น walk หรือ run animation
animator.SetFloat("speed", animatiorSpeed);
}
ในส่วนของ FixedUpdate()
// ถ้ามีการเคลื่อนที่ ให้ทำการ move player
if(moveDirection.x != 0 || moveDirection.z != 0)
{
moveDirection = moveDirection.normalized;
moveDirection *= speed;
rigidbody.AddForce(moveDirection);
}
ปล. นี่เป็นเพียง 1 วิธีในการสั่งงาน Macamin Animation นะครับ มีข้อแนะนำติดต่อมาได้นะครับ
Hints
- รับค่า Input ในส่วนของ reload ที่ Update()
- Set Animator ตามภาพ