irpg Community

Full Version: ต้องการสคริป Foot stepครับ
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
ต้องการสคลิปFoot stepที่เวลาเดินมีเสียง ต็อก แต็ก กรอกแกร็ก แฟ็บ แฟ็บ
อ่าครับ

นั่งนึกที่ไรก็นึกมิออก
และก็ต้องการสคลิปวิ่งครับ อันนี้ผมก็นึกมิออกเหมือนกัน
ยังไงก็ช่วยหน่อยนะครับ นึกไม่ออกจริงๆ
โน่ววว
ถ้าเป็นผม จะออกแบบให้ส่วนการควบคุมการเดิน ผูกกับ ตัวเล่นเสียง ครับ
และตั้งให้ตัวเล่นเสียง ผูกกับ เสียงเดินต่างๆ(กรณี มีหลายเสียง)
แล้วตั้ง Mode การเล่นเป็น Loop (ตั้งค่า mode ใน inspector)
(เพิ่มเติม ลักษณะ clip เสียงควรจะมีแบ่งช่วงการเดินด้วย เช่น ติ๊ก_ ติ๊ก_ ติ๊ก_)

และเขียนให้ เมื่อ user บังคับตัวละครให้เดิน ก็ให้เริ่มเล่นเสียงครับ
พอหยุดก็ให้หยุดเล่นเสียง พอเดินอีก ก็ให้เล่นเสียงเดินตั้งแต่เริ่มใหม่อีกครั้ง
เป็นอย่างนี้ไปเรื่อยๆครับ

ส่วนเรื่องเสียงเดินเปลี่ยนตามที่ต่างๆ
ให้ลองใช้ Collider ของตัวละครเช็คว่า ยืนอยู่ตรงไหน (Tag หรือ Layer อะไร)
และให้เล่นเสียงต่างๆกันไปครับ

ส่วนเรื่อง การวิ่ง ถ้าใช้พวก CharacterController, FPSController, CharacterMotor
(Asset > Import > CharacterController เป็น default ของ unity)
ให้ลองเขียนเข้าไปปรับ ความเร็วใน CharacterMotor ครับ
movement.maxForwardSpeed ความเร็วไปข้างหน้า
movement.maxSidewaysSpeed ความเร็วเดินข้างๆ
movement.maxBackwardsSpeed ความเร็วถอยหลัง

ถ้าเขียนพวกความเร็วเอง
ถ้าใช้ท่า
tranform.position += direction * Time.deltaTime;
ให้ทำตัวแปร speed เข้าไปด้วยครับ
tranform.position += direction * Time.deltaTime * speed;

ส่วนเรื่องเสียงตอนวิ่ง
ก็ให้เขียนเช็คว่าวิ่งอยู่หรือไม่ แล้วก็เล่นเสียงแบบวิ่ง ถ้าไม่ได้วิ่งก็เล่นแบบเดินครับ
เลียนแบบคลิปนี้เลยฮะ แล้วนำเอาไปประยุกต์นะ
http://www.youtube.com/watch?v=-JFW1cbuJww
ถ้าอยากได้แบบหลายเสียงสลับกันลองใช้ตัวนี้ดูก็ได้นะครับ

/**
* Script made by OMA [www.armedunity.com]
**/

var concrete : AudioClip[];
var wood : AudioClip[];
var dirt : AudioClip[];
var metal : AudioClip[];
private var step : boolean = true;
var audioStepLengthWalk : float = 0.45;
var audioStepLengthRun : float = 0.25;
var walkSpeed : float = 8.0;
var runSpeed : float = 12.0;


function OnCollisionStay (col : Collision) {
var controller : RigidController = GetComponent(RigidController);

if (controller.grounded && rigidbody.velocity.magnitude > (walkSpeed-2) && rigidbody.velocity.magnitude < (walkSpeed+2) && col.gameObject.tag == "Concrete" && step == true || controller.grounded && rigidbody.velocity.magnitude < (walkSpeed+2) && rigidbody.velocity.magnitude > (walkSpeed-2) && col.gameObject.tag == "Untagged" && step == true ) {
WalkOnConcrete();
}else if (controller.grounded && rigidbody.velocity.magnitude > (runSpeed-2) && col.gameObject.tag == "Concrete" && step == true || controller.grounded && rigidbody.velocity.magnitude > (runSpeed-2) && col.gameObject.tag == "Untagged" && step == true ) {
RunOnConcrete();
}else if (controller.grounded && rigidbody.velocity.magnitude > (walkSpeed-2) && rigidbody.velocity.magnitude < (walkSpeed+2) && col.gameObject.tag == "Wood" && step == true) {
WalkOnWood();
}else if (controller.grounded && rigidbody.velocity.magnitude > (runSpeed-2) && col.gameObject.tag == "Wood" && step == true){
RunOnWood();
}else if (controller.grounded && rigidbody.velocity.magnitude > (walkSpeed-2) && rigidbody.velocity.magnitude < (walkSpeed+2) && col.gameObject.tag == "Dirt" && step == true) {
WalkOnDirt();
}else if (controller.grounded && rigidbody.velocity.magnitude > (runSpeed-2) && col.gameObject.tag == "Dirt" && step == true){
RunOnDirt();
}else if (controller.grounded && rigidbody.velocity.magnitude > (walkSpeed-2) && rigidbody.velocity.magnitude < (walkSpeed+2) && col.gameObject.tag == "Metal" && step == true) {
WalkOnMetal();
}else if (controller.grounded && rigidbody.velocity.magnitude > (runSpeed-2) && col.gameObject.tag == "Metal" && step == true){
RunOnMetal();
}
}

/////////////////////////////////// CONCRETE ////////////////////////////////////////
function WalkOnConcrete() {
step = false;
audio.clip = concrete[Random.Range(0, concrete.length)];
audio.volume = .1;
audio.Play();
yield WaitForSeconds (audioStepLengthWalk);
step = true;
}

function RunOnConcrete() {
step = false;
audio.clip = concrete[Random.Range(0, concrete.length)];
audio.volume = .3;
audio.Play();
yield WaitForSeconds (audioStepLengthRun);
step = true;
}


////////////////////////////////// WOOD /////////////////////////////////////////////
function WalkOnWood() {
step = false;
audio.clip = wood[Random.Range(0, wood.length)];
audio.volume = .1;
audio.Play();
yield WaitForSeconds (audioStepLengthWalk);
step = true;
}

function RunOnWood() {
step = false;
audio.clip = wood[Random.Range(0, wood.length)];
audio.volume = .3;
audio.Play();
yield WaitForSeconds (audioStepLengthRun);
step = true;
}


/////////////////////////////////// DIRT //////////////////////////////////////////////
function WalkOnDirt() {
step = false;
audio.clip = dirt[Random.Range(0, dirt.length)];
audio.volume = .1;
audio.Play();
yield WaitForSeconds (audioStepLengthWalk);
step = true;
}

function RunOnDirt() {
step = false;
audio.clip = dirt[Random.Range(0, dirt.length)];
audio.volume = .3;
audio.Play();
yield WaitForSeconds (audioStepLengthRun);
step = true;
}


////////////////////////////////// METAL ///////////////////////////////////////////////
function WalkOnMetal() {
step = false;
audio.clip = metal[Random.Range(0, metal.length)];
audio.volume = .1;
audio.Play();
yield WaitForSeconds (audioStepLengthWalk);
step = true;
}

function RunOnMetal() {
step = false;
audio.clip = metal[Random.Range(0, metal.length)];
audio.volume = .3;
audio.Play();
yield WaitForSeconds (audioStepLengthRun);
step = true;
}

@script RequireComponent(AudioSource)


ถ้าอยากเปลี่ยนเสียงก็ทำ collider แล้วก็เปลี่ยนแท็กเอาครับ ผมเอามาจากฝรั่งเครดิตอยู่ในสคริปต์เลยครับ
ขอให้สนุกนะครับ