[英]Unity android ui touch buttons only works for one object
Hello i am new to Unity. 您好,我是Unity新手。
I have a multiplayer android 2D game made in Unity and I wanted to be able to control the player1 and player2 using UI touch buttons. 我有一个在Unity中制作的多人Android 2D游戏,我希望能够使用UI触摸按钮控制player1和player2。 Now the problem is im only able to control one player that has a child of my canvass(has ui touch buttons) and event trigger. 现在的问题是我只能控制一个拥有我的游说(有ui触摸按钮)和事件触发器的孩子的玩家。 What can i do to control both of my players when using UI touch buttons over Unity matchmaking. 在Unity配对上使用UI触摸按钮时,我可以做些什么来控制我的两个玩家。
public class CarSteering : NetworkBehaviour { 公共类CarSteering:NetworkBehaviour {
Rigidbody2D rb;
Transform mainCamera;
Vector3 cameraOffset;
[SerializeField] float cameraDistance = 16f;
[SerializeField] float cameraHeight = 16f;
public controlMode CarControlMode;
public float MaxSpeed = 7.0f;
public float MaxSteer = 2.0f;
public float Breaks = 0.2f;
[SerializeField]
float Acceleration = 0.0f;
float Steer = 0.0f;
bool AccelFwd, AccelBwd;
bool TouchAccel,TouchBack,TouchBreaks;
bool SteerLeft, SteerRight;
// Use this for initialization
void Start ()
{
if (!isLocalPlayer)
{
Destroy (this);
return;
}
rb = GetComponent<Rigidbody2D> ();
cameraOffset = new Vector3 (0f, cameraHeight, -cameraDistance);
mainCamera = Camera.main.transform;
MoveCamera ();
}
// Update is called once per frame
void FixedUpdate ()
{
if (CarControlMode == controlMode.KeyBoard)
{
if (Input.GetKey (KeyCode.UpArrow))
Accel (1); //Accelerate in forward direction
else if (Input.GetKey (KeyCode.DownArrow))
Accel (-1); //Accelerate in backward direction
else if (Input.GetKey (KeyCode.Space))
{
if (AccelFwd)
StopAccel (1, Breaks); //Breaks while in forward direction
else if (AccelBwd)
StopAccel (-1, Breaks); //Breaks while in backward direction
}
else
{
if (AccelFwd)
StopAccel (1, 0.1f); //Applies breaks slowly if no key is pressed while in forward direction
else if (AccelBwd)
StopAccel (-1, 0.1f); //Applies breaks slowly if no key is pressed while in backward direction
}
}
MoveCamera ();
if (CarControlMode == controlMode.Touch)
{
if (TouchAccel)
Accel (1);
else if(TouchBack)
Accel (-1);
else if(TouchBreaks)
{
if (AccelFwd)
StopAccel (1, Breaks);
else if (AccelBwd)
StopAccel (-1, Breaks);
}
else
{
if (AccelFwd)
StopAccel (1, 0.1f);
else if (AccelBwd)
StopAccel (-1, 0.1f);
}
}
MoveCamera ();
}
// Functions to be called from Onscreen buttons for touch input.
public void SetTouchAccel(bool TouchState)
{
TouchAccel = TouchState;
}
public void SetTouchBack(bool TouchState)
{
TouchBack = TouchState;
}
public void SetTouchBreaks(bool TouchState)
{
TouchBreaks = TouchState;
}
public void SetSteerLeft(bool TouchState)
{
SteerLeft = TouchState;
}
public void SetSteerRight(bool TouchState)
{
SteerRight = TouchState;
}
public void Accel(int Direction)
{
if (Direction == 1)
{
AccelFwd = true;
if (Acceleration <= MaxSpeed)
{
Acceleration += 0.05f;
}
if(CarControlMode == controlMode.KeyBoard)
{
if (Input.GetKey (KeyCode.LeftArrow))
transform.Rotate (Vector3.forward * Steer); //Steer left
if (Input.GetKey (KeyCode.RightArrow))
transform.Rotate (Vector3.back * Steer); //steer right
}
else if(CarControlMode == controlMode.Touch)
{
if(SteerLeft)
transform.Rotate (Vector3.forward * Steer);
else if(SteerRight)
transform.Rotate (Vector3.back * Steer);
}
}
else if (Direction == -1)
{
AccelBwd = true;
if ((-1 * MaxSpeed) <= Acceleration)
{
Acceleration -= 0.05f;
}
if(CarControlMode == controlMode.KeyBoard)
{
if (Input.GetKey (KeyCode.LeftArrow))
transform.Rotate (Vector3.back * Steer); //Steer left (while in reverse direction)
if (Input.GetKey (KeyCode.RightArrow))
transform.Rotate (Vector3.forward * Steer); //Steer left (while in reverse direction)
}
else if(CarControlMode == controlMode.Touch)
{
if(SteerLeft)
transform.Rotate (Vector3.forward * Steer);
else if(SteerRight)
transform.Rotate (Vector3.back * Steer);
}
}
if (Steer <= MaxSteer)
Steer += 0.01f;
if(CarControlMode == controlMode.Touch)
transform.Translate (Vector2.up * Acceleration * Time.deltaTime);
else if(CarControlMode == controlMode.KeyBoard)
transform.Translate (Vector2.up * Acceleration * Time.deltaTime);
MoveCamera ();
}
public void StopAccel(int Direction, float BreakingFactor)
{
if (Direction == 1)
{
if (Acceleration >= 0.0f)
{
Acceleration -= BreakingFactor;
if (CarControlMode == controlMode.KeyBoard)
{
if (Input.GetKey (KeyCode.LeftArrow))
transform.Rotate (Vector3.forward * Steer);
if (Input.GetKey (KeyCode.RightArrow))
transform.Rotate (Vector3.back * Steer);
}
else if(CarControlMode == controlMode.Touch)
{
if(SteerLeft)
transform.Rotate (Vector3.forward * Steer);
else if(SteerRight)
transform.Rotate (Vector3.back * Steer);
}
}
else
AccelFwd = false;
}
else if (Direction == -1)
{
if(Acceleration <= 0.0f)
{
Acceleration += BreakingFactor;
if (CarControlMode == controlMode.KeyBoard)
{
if (Input.GetKey (KeyCode.LeftArrow))
transform.Rotate (Vector3.back * Steer);
if (Input.GetKey (KeyCode.RightArrow))
transform.Rotate (Vector3.forward * Steer);
}
else if(CarControlMode == controlMode.Touch)
{
if(SteerLeft)
transform.Rotate (Vector3.forward * Steer);
else if(SteerRight)
transform.Rotate (Vector3.back * Steer);
}
}
else
AccelBwd = false;
}
if (Steer >= 0.0f)
Steer -= 0.01f;
transform.Translate (Vector2.up * Acceleration * Time.deltaTime);
MoveCamera ();
}
void OnCollisionEnter2D(Collision2D col){
if (col.gameObject.tag == "Obstacles") {
Destroy (GameObject.FindGameObjectWithTag ("Obstacles"));
} else if (col.gameObject.tag == "win") {
SceneManager.LoadScene ("Youwin");
}
}
void MoveCamera()
{
mainCamera.position = transform.position;
mainCamera.rotation = transform.rotation;
mainCamera.Translate (cameraOffset);
mainCamera.LookAt (transform);
}
} }
确保Api兼容层不是游戏构建设置(其他设置)中的.NET 2.0子集,因为它只支持单点触摸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.