2016-04-22 41 views
0

我一直試圖讓它自己向前移動,並以圓形方式左右旋轉,如果用C#統一按下左/右鍵,這張圖片會使它更清晰的:http://prnt.sc/avmxbn使用Unity中的C#鍵改變玩家的方向

我只能讓它自行移動,這是我到目前爲止的代碼:

using UnityEngine; 
using System.Collections; 

public class PlayerBehaviour : MonoBehaviour { 

Update(){ transform.localPosition += transform.forward *speed *Time.deltaTime 

float speed = 5.0f; 
// Use this for initialization 
void Start() { 
    Debug.Log ("it's working?");  

} 

// Update is called once per frame 
void Update() { 

    transform.localPosition += transform.forward * speed * Time.deltaTime; 


} 

void FixedUpdate(){ 

} 

}

我不知道,但是,如何改變向左或環形路徑中的正確方向,如圖片鏈接數字化onstrates。任何人都可以幫助我?謝謝。

+0

你想讓自己的運動變得像運動一樣嗎?或者是直線的UpDownLeftRight線條是彎曲的? –

+0

@YotamSalmon我希望這會讓它更清晰,我希望當按鍵沒有按下時,它會沿連續的方向走,但是當按下左右鍵時,球員的路徑應該開始朝着鍵的方向彎曲被按下 – rBai

+0

你忘了添加你的代碼嗎? –

回答

1

你的代碼中有明顯的錯誤。您撥打Update()兩次。第一次沒有返回類型。你不應該那樣做。首先刪除第一個Update()和同一行上的代碼。

然後回答你的問題,你將不得不考慮從用戶獲得輸入。使用Input.GetKey()併爲其傳遞一個KeyCode值,如'A'鍵爲KeyCode.A。所以,你可以說:

if(Input.GetKey(KeyCode.A)) 
{ 
    //do something(for example, Turn the player right.) 
} 

然後考慮使用旋轉到transform.Roate旋轉玩家的對象。

+1

我會建議找到旋轉的角度,你需要使用Time.deltatime *速度來計算在該幀期間行進的距離, 然後使用弧長的方程,向後計算它們的角度將會轉向,然後計算弧末端的最終位置。這樣,玩家不僅會處於正確的位置,而且會面臨正確的方向。 –

0

安裝這個腳本到你的移動物體:

using UnityEngine; 

public class MoveController : MonoBehaviour { 
    float angle = 1F; 
    float speed = 0.2F; 
    void Update() 
    { 
     if (Input.GetKey (KeyCode.LeftArrow)) 
      transform.Rotate(Vector3.up, -angle); 
     else if(Input.GetKey (KeyCode.RightArrow)) 
      transform.Rotate(Vector3.up, angle); 

     transform.Translate(Vector3.forward * speed); 
    } 
} 

這裏的關鍵點是分離你從你的旋轉功能的移動。

0

你可以使用這個腳本的運動:

using UnityEngine; 

public class MovementController : MonoBehaviour { 

    public Rigidbody rigidbody; 

    float angle = 0f; 
    const float SPEED = 1f; 
    float multiplier = 1f; 

    void FixedUpdate(){ 

     if (Input.GetKey (KeyCode.LeftArrow)) 
      angle -= Time.deltaTime * SPEED * multiplier; 
     else if(Input.GetKey (KeyCode.RightArrow)) 
      angle += Time.deltaTime * SPEED * multiplier; 

     rigidbody.velocity = new Vector2(Mathf.Sin(angle) * SPEED, Mathf.Cos(angle) * SPEED); 

    } 
} 

倍頻器值是成反比的半徑。

相關問題