如何在不弄乱我的虚拟操纵杆的情况下为其他操作添加更多按钮?

How can I add more buttons for other actions without messing up my virtual joystick?

几个小时以来,我一直在尝试完成这项工作,但没有任何运气。我是 Unity3D 和 C# 的新手,所以这可能是我无法让它工作的原因。

我有一个 canvas,并添加了一个圆形按钮,就像一个操纵杆。在按钮上,在检查器菜单中,我有 2 个事件触发器,一个用于拖动,一个用于结束拖动。每个都调用自己单独的函数 "StartDrag();" 和 "EndDrag();",它们工作得很好,使操纵杆正常工作。

我遇到的问题是,如果我添加一个新按钮,比如说 "jumping" 操作,如果我在使用操纵杆时按下它,操纵杆上的按钮不会'如果不保持其位置,它会受到新触摸的影响,从而扰乱运动。您可以在下面看到适用于操纵杆的代码。如何在不弄乱操纵杆的情况下为其他操作添加更多按钮?非常感谢您,如果可能的话,请记住我的 C# 和 Unity 经验非常有限。

using UnityEngine;
using System.Collections;

public class JoystickMovement : MonoBehaviour {

private Vector3 joystick_center;
public GameObject Player;
public PlayerData playerDataScript;

void Start () {
    joystick_center = transform.position;
}

public void StartDrag(){
    float x = Input.mousePosition.x;
    float y = Input.mousePosition.y;

    Vector3 joyPosition = Vector3.ClampMagnitude(new Vector3 (x-joystick_center.x, y-joystick_center.y, 0), 80) + joystick_center;
    transform.position = joyPosition;
}

public void ResetDrag(){
    transform.position = joystick_center;
    Player.rigidbody.velocity = Vector3.zero;
}

void FixedUpdate () {

    if(playerDataScript.playerStatus == "dead")
    {
        ResetDrag();
    }

    if (playerDataScript.playerStatus == "alive") 
    {
        Player.rigidbody.velocity = Vector3.ClampMagnitude(Player.rigidbody.velocity, 4);
        Player.rigidbody.AddRelativeForce (new Vector3(transform.position.x - joystick_center.x, 0, transform.position.y - joystick_center.y));

    }
}

}

我的代码的主要问题是我需要确定我需要为我的操纵杆观察哪个触摸。当我有 2 个手指在屏幕上时,操纵杆有点混乱。为了查看我需要哪个触摸,我可以通过将其 x 或 y 坐标与我的操纵杆的原始坐标进行比较,尝试仅使用操纵杆周围的触摸。如果它们很接近,那么我可以 运行 使用特定的触摸来获得特定的代码。

void Update() 
{
    int i = 0;
    while (i < Input.touchCount)
    {
        if (Input.GetTouch(i).position.x > joystick_center.x - 150 && Input.GetTouch(i).position.x < joystick_center.x + 150)
        {
            if (Input.GetTouch(i).phase != TouchPhase.Ended && Input.GetTouch(i).phase != TouchPhase.Canceled && playerDataScript.playerStatus == "alive")
            {

                //joystick movement code

            } else {
                // reset joystick movement
            }
        }

        ++i;
    }
}