Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 我如何才能为其他操作添加更多按钮,而不会弄乱我的虚拟操纵杆?_C#_Unity3d_Touch_Drag - Fatal编程技术网

C# 我如何才能为其他操作添加更多按钮,而不会弄乱我的虚拟操纵杆?

C# 我如何才能为其他操作添加更多按钮,而不会弄乱我的虚拟操纵杆?,c#,unity3d,touch,drag,C#,Unity3d,Touch,Drag,我已经试着把这件事做完好几个小时了,但没有一点运气。我对Unity3D和C还很陌生,所以这可能是我无法让它工作的原因 我有一块画布,上面加了一个圆形按钮,就像操纵杆一样。在inspector菜单的按钮上,我有两个事件触发器,一个用于拖动,一个用于结束拖动。每个调用各自独立的函数StartDrag;和端阻力;工作正常,使操纵杆正常工作 我遇到的问题是,如果我添加了一个新按钮,比如说跳跃动作,如果我在使用操纵杆时按下它,操纵杆上的按钮将无法保持其位置,它会受到新触摸的影响,扰乱动作。下面您可以看到操

我已经试着把这件事做完好几个小时了,但没有一点运气。我对Unity3D和C还很陌生,所以这可能是我无法让它工作的原因

我有一块画布,上面加了一个圆形按钮,就像操纵杆一样。在inspector菜单的按钮上,我有两个事件触发器,一个用于拖动,一个用于结束拖动。每个调用各自独立的函数StartDrag;和端阻力;工作正常,使操纵杆正常工作

我遇到的问题是,如果我添加了一个新按钮,比如说跳跃动作,如果我在使用操纵杆时按下它,操纵杆上的按钮将无法保持其位置,它会受到新触摸的影响,扰乱动作。下面您可以看到操纵杆的代码。我怎样才能为其他操作添加更多按钮,而不会弄乱操纵杆?提前非常感谢,如果可能的话,请记住我的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));

    }
}

}

我的代码的主要问题是,我需要确定我需要观察操纵杆的触摸。当我有两个手指在屏幕上时,操纵杆有点混乱。为了查看我需要哪种触摸,我可以通过比较操纵杆的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;
    }
}

如果有人能帮忙的话,这将是一个非常美好的周末。。仍然没有找到解决办法