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