irpg Community
ต้องการสคริป Foot stepครับ - Printable Version

+- irpg Community (https://irpg.in.th)
+-- Forum: Publica Foundation (https://irpg.in.th/forum-23.html)
+--- Forum: Request Ranger Center (https://irpg.in.th/forum-24.html)
+--- Thread: ต้องการสคริป Foot stepครับ (/thread-1839.html)



ต้องการสคริป Foot stepครับ - santa555a - 05-03-2014

ต้องการสคลิปFoot stepที่เวลาเดินมีเสียง ต็อก แต็ก กรอกแกร็ก แฟ็บ แฟ็บ
อ่าครับ

นั่งนึกที่ไรก็นึกมิออก
และก็ต้องการสคลิปวิ่งครับ อันนี้ผมก็นึกมิออกเหมือนกัน
ยังไงก็ช่วยหน่อยนะครับ นึกไม่ออกจริงๆ
โน่ววว


RE: ต้องการสคริป Foot stepครับ - Cliff - 05-06-2014

ถ้าเป็นผม จะออกแบบให้ส่วนการควบคุมการเดิน ผูกกับ ตัวเล่นเสียง ครับ
และตั้งให้ตัวเล่นเสียง ผูกกับ เสียงเดินต่างๆ(กรณี มีหลายเสียง)
แล้วตั้ง 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;

ส่วนเรื่องเสียงตอนวิ่ง
ก็ให้เขียนเช็คว่าวิ่งอยู่หรือไม่ แล้วก็เล่นเสียงแบบวิ่ง ถ้าไม่ได้วิ่งก็เล่นแบบเดินครับ


RE: ต้องการสคริป Foot stepครับ - hackerdew - 05-19-2014

เลียนแบบคลิปนี้เลยฮะ แล้วนำเอาไปประยุกต์นะ
http://www.youtube.com/watch?v=-JFW1cbuJww


RE: ต้องการสคริป Foot stepครับ - lightwolfz - 06-01-2014

ถ้าอยากได้แบบหลายเสียงสลับกันลองใช้ตัวนี้ดูก็ได้นะครับ

/**
* 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 แล้วก็เปลี่ยนแท็กเอาครับ ผมเอามาจากฝรั่งเครดิตอยู่ในสคริปต์เลยครับ
ขอให้สนุกนะครับ