2016-04-07 14 views
0
using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour 
{ 


    public float speed = 80.0f; // Code for how fast the ball can move. Also it will be public so we can change it inside of Unity itself. 
    private Rigidbody rb; // Variable that applies itself to Ball 


    void Start() 
    { 
     rb = GetComponent<Rigidbody>(); 
    } 

    // Code That enables our Player to move around. 
    void Movement() 
    { 

     float moveHorizontal = Input.GetAxis ("Horizontal"); 
     float moveVertical = Input.GetAxis ("Vertical"); 
     Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical); 
     rb.AddForce (movement * speed); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     Movement(); 
    } 
+0

私はコードをStartメソッドに実装したいと考えています。 –

+0

あなたがしようとしていることを説明し、それをうまく説明すれば、誰かがあなたの質問を理解し、あなたを助けることができるかもしれません。どのような入力? – Programmer

+0

入力はキーボードのキーになります。私は2つのプレーヤーオブジェクトを持っていますが、私は各プレイヤーが異なるキーを持って移動するようにします –

答えて

0

Input.GetAxis ("Horizontal");およびInput.GetAxis ("Vertical");は、上下、上下、左右の矢印を検出します。 Input.GetAxis ("Horizontal");Input.GetAxis ("Vertical");を使用する場合、ユニティ入力の設定を変更するためにユニティ入力の設定を混乱させる必要があります。Unityで定義されたキーを変更しない限り、Unityは両方のプレイヤーを移動します。解決策は、Input.GetKey()を使用し、キー名を指定することです。 2人のプレーヤーを作り、それらに剛体をつけなさい。プレイヤー1をPlayer1RBとPlayer2にドラッグして、エディターでPlayer2RBにすることができます。

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour 
{ 
    public float speed = 80.0f; // Code for how fast the ball can move. Also it will be public so we can change it inside of Unity itself. 
    public Rigidbody player1RB; //Player 1 Rigidbody 
    public Rigidbody player2RB; //Player 2 Rigidbody 


    //Player 1 Code with aswd keys 
    void Player1Movement() 
    { 
     if (Input.GetKey(KeyCode.A)) 
     { 
      player1RB.AddForce(Vector3.left * speed); 

     } 

     if (Input.GetKey(KeyCode.D)) 
     { 
      player1RB.AddForce(Vector3.right * speed); 

     } 

     if (Input.GetKey(KeyCode.W)) 
     { 
      player1RB.AddForce(Vector3.forward * speed); 

     } 

     if (Input.GetKey(KeyCode.S)) 
     { 
      player1RB.AddForce(Vector3.back * speed); 

     } 
    } 

    //Player 2 Code with arrow keys 
    void Player2Movement() 
    { 
     if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
      player2RB.AddForce(Vector3.left * speed); 

     } 

     if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      player2RB.AddForce(Vector3.right * speed); 

     } 

     if (Input.GetKey(KeyCode.UpArrow)) 
     { 
      player2RB.AddForce(Vector3.forward * speed); 

     } 

     if (Input.GetKey(KeyCode.DownArrow)) 
     { 
      player2RB.AddForce(Vector3.back * speed); 

     } 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     Player1Movement(); 
     Player2Movement(); 
    } 
} 
+0

今すぐmakessense、ありがとうございました。私は自分のコードを開発しようとしていたが、それはプレーヤー2のために働いたが、プレーヤー1はもう動けなかった:/ありがとう –

+0

うれしかった。問題が解決した場合は、それを回答として受け入れることができます。私は... g ... b..o幸運の仲間! – Programmer

+0

これは3Dスケールか2Dスケールですか? –

0

これを行うには、Input.GetKeyDown機能を使用できます。ただし、これを動作させるには、これをキーコードで入力する必要があります。この関数はbooleanを返しますので、if文でこれを使用できます。 WASDキーの機能は次のとおりです。キーコードはこのようなものです。

Keycode.W 

だから、例えば、あなたのif文を使用すると、ゲームオブジェクトのボタンが押された依存し、その上に与えられたのxのyまたはz方向に変換移動する移動するには、このif(Input.GetKeyDown(KeyCode.W) .Thenようになります。あなたが望むなら、後で変数を変更できるように、速度で移動したい値を掛けることができます。コードサンプルが必要な場合は、お問い合わせください。各プレイヤーにplayeridを持たせるには、スクリプトに変数を含めることができます。また、startメソッドでは、player idやguidを生成して、その変数を埋めることができます。その直後のスクリプトの外部にある変数にアクセスするには、変数をpublicにしたいと思うでしょう。

+0

コードサンプルがあるかもしれませんが、どういう意味ですか? –

関連する問題