Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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# 统一多点触控android 2D_C#_Android_Unity3d_2d_Multi Touch - Fatal编程技术网

C# 统一多点触控android 2D

C# 统一多点触控android 2D,c#,android,unity3d,2d,multi-touch,C#,Android,Unity3d,2d,Multi Touch,我正在制作一个游戏,主角可以跳跃,左右移动。我有一个问题。多点触摸不起作用。我用的是C语言,我在互联网上到处搜索都没有找到答案 我的代码: using UnityEngine; using System.Collections; [RequireComponent(typeof (Rigidbody2D))] [RequireComponent(typeof(BoxCollider2D))] public class TouchControls : MonoBehaviour { /

我正在制作一个游戏,主角可以跳跃,左右移动。我有一个问题。多点触摸不起作用。我用的是C语言,我在互联网上到处搜索都没有找到答案

我的代码:

using UnityEngine;
using System.Collections;

[RequireComponent(typeof (Rigidbody2D))]
[RequireComponent(typeof(BoxCollider2D))]
public class TouchControls : MonoBehaviour {

    // GUI textures
    public GUITexture guiLeft;
    public GUITexture guiRight;
    public GUITexture guiJump;

    // Movement variables
    public float moveSpeed = 5f;
    public float jumpForce = 50f;
    public float maxJumpVelocity = 2f;

    // Movement flags
    private bool moveLeft, moveRight, doJump = false;

    // Update is called once per frame
    void Update () {

        // Check to see if the screen is being touched
        if (Input.touchCount > 0)
        {
            // Get the touch info
            Touch t = Input.GetTouch(0);

            // Did the touch action just begin?
            if (t.phase == TouchPhase.Began)
            {
                // Are we touching the left arrow?
                if (guiLeft.HitTest(t.position, Camera.main))
                {
                    Debug.Log("Touching Left Control");
                    moveLeft = true;
                }

                // Are we touching the right arrow?
                if (guiRight.HitTest(t.position, Camera.main))
                {
                    Debug.Log("Touching Right Control");
                    moveRight = true;
                }

                // Are we touching the jump button?
                if (guiJump.HitTest(t.position, Camera.main))
                {
                    Debug.Log("Touching Jump Control");
                    doJump = true;
                }
            }

            // Did the touch end?
            if (t.phase == TouchPhase.Ended)
            {
                // Stop all movement
                doJump = moveLeft = moveRight = false;
                rigidbody2D.velocity = Vector2.zero;
            }
        }

        // Is the left mouse button down?
        if (Input.GetMouseButtonDown(0))
        {
            // Are we clicking the left arrow?
            if (guiLeft.HitTest(Input.mousePosition, Camera.main))
            {
                Debug.Log("Touching Left Control");
                moveLeft = true;
            }

            // Are we clicking the right arrow?
            if (guiRight.HitTest(Input.mousePosition, Camera.main))
            {
                Debug.Log("Touching Right Control");
                moveRight = true;
            }

            // Are we clicking the jump button?
            if (guiJump.HitTest(Input.mousePosition, Camera.main))
            {
                Debug.Log("Touching Jump Control");
                doJump = true;
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            // Stop all movement on left mouse button up
            doJump = moveLeft = moveRight = false;
            rigidbody2D.velocity = Vector2.zero;
        }
    }

    void FixedUpdate()
    {
        // Set velocity based on our movement flags.
        if (moveLeft)
        {
            rigidbody2D.velocity = -Vector2.right * moveSpeed;
        }

        if (moveRight)
        {
            rigidbody2D.velocity = Vector2.right * moveSpeed;
        }

        if (doJump)
        {
            // If we have not reached the maximum jump velocity, keep applying force.
            if (rigidbody2D.velocity.y < maxJumpVelocity)
            {
                rigidbody2D.AddForce(Vector2.up * jumpForce);
            } else {
                // Otherwise stop jumping
                doJump = false;
            }
        }
    }
}

您必须在所有触摸中列出:

if (Input.touchCount > 0) {
    for(int i = 0; i < Input.touchCount; i++) {
        Touch t = Input.GetTouch(0);
        ..
        ..
}
这意味着,每次触摸都将单独处理。 正式文件


祝你的游戏好运。

用以下内容替换你的脚本:

using UnityEngine;
using System.Collections;

[RequireComponent(typeof (Rigidbody2D))]
[RequireComponent(typeof(BoxCollider2D))]
public class TouchControls : MonoBehaviour {

public GUITexture guiLeft;
public GUITexture guiRight;
public GUITexture guiJump;

public float moveSpeed = 5f;
public float jumpForce = 50f;
public float maxJumpVelocity = 2f;

private bool moveLeft, moveRight, doJump = false;

void Update () {

    if (Input.touchCount > 0) {
        for(int i = 0; i < Input.touchCount; i++) {
            Touch t = Input.GetTouch(i);

            if (t.phase == TouchPhase.Began) {
                if (guiLeft.HitTest(t.position, Camera.main)) {
                    Debug.Log("Touching Left Control");
                    moveLeft = true;
                }

                if (guiRight.HitTest(t.position, Camera.main)) {
                    Debug.Log("Touching Right Control");
                    moveRight = true;
                }

                // Are we touching the jump button?
                if (guiJump.HitTest(t.position, Camera.main)) {
                    Debug.Log("Touching Jump Control");
                    doJump = true;
                }
            }

            if (t.phase == TouchPhase.Ended) {
                // Stop all movement
                doJump = moveLeft = moveRight = false;
                rigidbody2D.velocity = Vector2.zero;
            }
        }
    }

    if (Input.GetMouseButtonDown(0)) {
        if (guiLeft.HitTest(Input.mousePosition, Camera.main)) {
            Debug.Log("Touching Left Control");
            moveLeft = true;
        }

        if (guiRight.HitTest(Input.mousePosition, Camera.main)) {
            Debug.Log("Touching Right Control");
            moveRight = true;
        }

        if (guiJump.HitTest(Input.mousePosition, Camera.main)) {
            Debug.Log("Touching Jump Control");
            doJump = true;
        }
    }

    if (Input.GetMouseButtonUp(0)) {
        doJump = moveLeft = moveRight = false;
        rigidbody2D.velocity = Vector2.zero;
    }
}

void FixedUpdate() {
    if (moveLeft) {
        rigidbody2D.velocity = -Vector2.right * moveSpeed;
    }

    if (moveRight) {
        rigidbody2D.velocity = Vector2.right * moveSpeed;
    }

    if (doJump) {
        if (rigidbody2D.velocity.y < maxJumpVelocity) {
            rigidbody2D.AddForce(Vector2.up * jumpForce);
        } else {
            doJump = false;
        }
    }
}
}

一切都会好起来的。我已经测试过了,没有错误。

它不起作用,但谢谢你的回答。。。更多帮助请可能的语法错误,因为只有JavaScript示例文档。你能帮我吗?Unity没有看到脚本中的错误,但在我的智能手机中,多点触控不起作用:/你确定你的智能手机支持多点触控,并且吉他的位置正确吗?我的智能手机支持多点触控;我可以用一个手指移动角色,但两个手指不起作用。等5分钟,我的android SDK出现问题,我想当Unity制作APK文件时,我没有看到file.APK和控制台说: