Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用首选键在unity中移动玩家_C#_Unity3d_Multiplayer - Fatal编程技术网

C# 使用首选键在unity中移动玩家

C# 使用首选键在unity中移动玩家,c#,unity3d,multiplayer,C#,Unity3d,Multiplayer,我试图通过添加两个球以不同的方式完成roll a ball教程()。 所以两个玩家可以玩这个游戏。 但我面临的问题是,我想为第二个播放器配置首选键,比如第一个播放器使用传统的箭头键,第二个播放器使用w、a、s、d向左向右移动。。。我第一个玩家的c-sharp代码是 using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public float speed; p

我试图通过添加两个球以不同的方式完成roll a ball教程()。 所以两个玩家可以玩这个游戏。 但我面临的问题是,我想为第二个播放器配置首选键,比如第一个播放器使用传统的箭头键,第二个播放器使用w、a、s、d向左向右移动。。。我第一个玩家的c-sharp代码是

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

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

void FixedUpdate()
{
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");

    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);                //Values for movement vector 3 takes three arguments like x y z for positions.

    rb.AddForce (movement * speed);
}
}
使用UnityEngine;
使用系统集合;
公共类玩家控制器:单行为{
公众浮标速度;
私人刚体;
void Start()
{
rb=GetComponent();
}
void FixedUpdate()
{
float moveHorizontal=Input.GetAxis(“水平”);
float moveVertical=Input.GetAxis(“垂直”);
Vector3 movement=new Vector3(moveHorizontal,0.0f,moveVertical);//移动向量3的值采用三个参数,如x y z表示位置。
rb.AddForce(移动*速度);
}
}

如果有人有解决方案,请告诉我,您可以在
编辑->项目设置->输入中定义更多输入。要添加更多输入,只需增加大小值并在中配置新值。至少输入新输入的名称和键。最后,在代码中,使用在项目设置中指定的名称调用播放器2的新输入

void FixedUpdate()
{
    //float moveHorizontal = Input.GetAxis("Horizontal");
    //float moveVertical = Input.GetAxis("Vertical");

    // example for player 2
    float moveHorizontalPlayer2 = Input.GetAxis("HorizontalPlayer2");
    float moveVerticalPlayer2 = Input.GetAxis("VerticalPlayer2");

    Vector3 movement = new Vector3 (moveHorizontalPlayer2 , 0.0f, moveVerticalPlayer2 );

    rb.AddForce (movement * speed);
}

您可以在
edit->project settings->Input
中定义更多输入。要添加更多输入,只需增加大小值并在中配置新值。至少输入新输入的名称和键。最后,在代码中,使用在项目设置中指定的名称调用播放器2的新输入

void FixedUpdate()
{
    //float moveHorizontal = Input.GetAxis("Horizontal");
    //float moveVertical = Input.GetAxis("Vertical");

    // example for player 2
    float moveHorizontalPlayer2 = Input.GetAxis("HorizontalPlayer2");
    float moveVerticalPlayer2 = Input.GetAxis("VerticalPlayer2");

    Vector3 movement = new Vector3 (moveHorizontalPlayer2 , 0.0f, moveVerticalPlayer2 );

    rb.AddForce (movement * speed);
}
回答了类似的问题

不需要修改按键控件的最简单解决方案是根本不使用
Input.GetAxis
。使用
Input.GetKey()
及其
keycodes
enum检测每个按键。问题解决了!现在从编辑器中指定两个球。如果您想要的话,您可以很容易地修改它,使其与一个球一起工作

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 FixedUpdate()
    {
        Player1Movement();
        Player2Movement();
    }
}
回答了类似的问题

不需要修改按键控件的最简单解决方案是根本不使用
Input.GetAxis
。使用
Input.GetKey()
及其
keycodes
enum检测每个按键。问题解决了!现在从编辑器中指定两个球。如果您想要的话,您可以很容易地修改它,使其与一个球一起工作

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 FixedUpdate()
    {
        Player1Movement();
        Player2Movement();
    }
}

球不会上下移动。你是说向前、向后、向左和向右?移动不是问题,问题是为每个球员设置不同的移动键,因此两个球员在同一键盘上有单独的控制权。球不会向上或向下移动。你是说向前、向后、向左和向右?移动不是问题,问题是为每个播放器设置不同的移动键,这样两个播放器在同一键盘上都有单独的控制。你需要确保预定义的输入具有备用键,如果你想使用这些键,你需要从中删除这些键。不太确定,但我认为水平和垂直都是为a/d/左/右和s/w/下/上配置的。您需要确保预定义的输入具有备用键,如果您想将其用于自己的输入,则需要从中删除这些键。不太确定,但我认为水平和垂直分别配置为a/d/左/右和s/w/下/上。