适用于2名玩家的Unity Mobile Control(计数触控)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适用于2名玩家的Unity Mobile Control(计数触控)相关的知识,希望对你有一定的参考价值。

我试图在一个屏幕上实现2个玩家的控制

这是一个代码:

if (playerNum == 1) {
    if (Input.touchCount > 0) {
        for (int i = 0; i < 1; i++) {
            if (Input.GetTouch (i).position.x > 0 && Input.GetTouch (i).position.x < Screen.width / 4) {
                transform.Rotate (Vector3.forward * 300f * Time.deltaTime);
            }
            if (Input.GetTouch (i).position.x > Screen.width / 4 && Input.GetTouch (i).position.x < Screen.width / 2) {
                transform.Rotate (Vector3.back * 300f * Time.deltaTime);
            }
        }
    }
} else {
    if (Input.touchCount > 0) {
        for (int i = 0; i < 1; i++) {
            if (Input.GetTouch (i).position.x > Screen.width / 2 && Input.GetTouch (i).position.x < Screen.width * 3 / 4) {
                transform.Rotate (Vector3.back * 300f * Time.deltaTime);
            }
            if (Input.GetTouch (i).position.x > Screen.width * 3 / 4 && Input.GetTouch (i).position.x < Screen.width) {
                transform.Rotate (Vector3.forward * 300f * Time.deltaTime);
            }
        }
    }
}

这就是原理图:

enter image description here

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

我只能使用一个水龙头,不仅用于红色或绿色区域,而且用于全屏。如果值更高,i <5(例如),我只能在一个区域中握住4个手指并且旋转速度快4倍。如何更改代码以仅计算每个区域的一次点击?

答案

我手边没有任何模拟器,但我相信以下应该可以工作:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public float Speed = 300.0f;

    void Update()
    {
        var w = Screen.width / 4.0f;
        var h = Screen.height;
        var r1 = new Rect(w * 0, 0.0f, w, h);
        var r2 = new Rect(w * 1, 0.0f, w, h);
        var r3 = new Rect(w * 2, 0.0f, w, h);
        var r4 = new Rect(w * 3, 0.0f, w, h);

        var t1 = Input.GetTouch(0);
        var tc = Input.touchCount;

        if (tc == 1 && t1.phase == TouchPhase.Began)
        {
            var pos = t1.position;
            var dir = Vector3.zero;

            if (r1.Contains(t1.position))
                dir = Vector3.back;

            if (r2.Contains(pos))
                dir = Vector3.forward;

            transform.Rotate(dir * Speed);
        }
    }
}
另一答案

所以,我创建了4个变量:AZone,BZone,CZone,DZone。现在我可以控制每一次触摸。在我的例子中,只有当AZone等于1时我才会旋转。它的效果非常好,正是我所需要的。谢谢你帮助我解决这个问题。

if (Input.touchCount > 0) {
    AZone = 0;
    BZone = 0;
    //Debug.Log (Input.touchCount);
    for (int i = 0; i < Input.touchCount; i++) {
        if (Input.GetTouch (i).position.x > 0 && Input.GetTouch (i).position.x < Screen.width / 4) {
            AZone += 1;
            if (AZone == 1) {
                transform.Rotate (Vector3.forward * 300f * Time.deltaTime);
            }
            //Debug.Log (AZone);
        }
        if (Input.GetTouch (i).position.x > Screen.width / 4 && Input.GetTouch (i).position.x < Screen.width / 2) {
            BZone += 1;
            if (BZone == 1) {
                transform.Rotate (Vector3.back * 300f * Time.deltaTime);
            }
        }
    }
}

以上是关于适用于2名玩家的Unity Mobile Control(计数触控)的主要内容,如果未能解决你的问题,请参考以下文章

unity3d (2d!) - 相机以玩家为中心,但永远不会超过“地图”边界

phpmyadmin 事件语法错误,而它适用于 sql 命令

适用于 Android 的 JQuery Mobile + PhoneGap - 加载 index.html 时出错

jQuery Mobile 自定义选择菜单适用于 Mobile Safari,但不适用于 UIWebView

适用于桌面和移动设备的 jQuery Mobile

适用于 Windows Mobile 的简单 ANPR