Posts: 5
Threads: 1
Thanks Received: 14 in 3 posts
Thanks Given: 0
Joined: Mar 2014
Reputation:
0
05-06-2014, 05:43 PM
(This post was last modified: 05-06-2014, 05:58 PM by Cliff.)
ถ้าเป็นผม จะออกแบบให้ส่วนการควบคุมการเดิน ผูกกับ ตัวเล่นเสียง ครับ
และตั้งให้ตัวเล่นเสียง ผูกกับ เสียงเดินต่างๆ(กรณี มีหลายเสียง)
แล้วตั้ง 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;
ส่วนเรื่องเสียงตอนวิ่ง
ก็ให้เขียนเช็คว่าวิ่งอยู่หรือไม่ แล้วก็เล่นเสียงแบบวิ่ง ถ้าไม่ได้วิ่งก็เล่นแบบเดินครับ
•
Posts: 73
Threads: 4
Thanks Received: 90 in 36 posts
Thanks Given: 17
Joined: Feb 2013
Reputation:
0
เลียนแบบคลิปนี้เลยฮะ แล้วนำเอาไปประยุกต์นะ
http://www.youtube.com/watch?v=-JFW1cbuJww
[On Going]
PROJECT : DownMorana 3 : Revenge [Status : 50%]
PROJECT : SEVEN ROOM (Horror) [Status : 30%]
[Complete]
มินิเกมคริสต์มาส : SickSanta : วันนี้พี่ขอเป็นซานต้านะ
•
Posts: 28
Threads: 12
Thanks Received: 38 in 12 posts
Thanks Given: 22
Joined: Feb 2013
Reputation:
0
ถ้าอยากได้แบบหลายเสียงสลับกันลองใช้ตัวนี้ดูก็ได้นะครับ
/**
* 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 แล้วก็เปลี่ยนแท็กเอาครับ ผมเอามาจากฝรั่งเครดิตอยู่ในสคริปต์เลยครับ
ขอให้สนุกนะครับ
•