C# 统一多点触控android 2D
我正在制作一个游戏,主角可以跳跃,左右移动。我有一个问题。多点触摸不起作用。我用的是C语言,我在互联网上到处搜索都没有找到答案 我的代码: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 { /
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和控制台说: