【问题标题】:Unity sample project "Roll a Ball" does not work on iPad (Ball does not move)?Unity 示例项目“Roll a Ball”在 iPad 上不起作用(球不动)?
【发布时间】:2017-03-01 11:11:20
【问题描述】:

Unity 在此链接中有这个示例项目“Roll a Ball”:https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial

我已经能够在我的 Mac 上构建并使其 100% 正常工作。我可以使用键盘上的箭头键来移动球。一切都在 Mac 平台上运行。

但是,当我使用相同的代码在 iPad 上构建和部署此游戏时,我注意到当我用手指尝试移动球时,球根本没有移动。 (唯一的好处是所有的立方体都旋转得很好)

所以,我的问题是我是否需要修改球的 C# 脚本以使其适用于 iPad(尽管该脚本已经适用于 Mac)?

这是球的 C# 脚本:

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

public class PlayerController : MonoBehaviour
{

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    void Start ()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText ();
        winText.text = "";
    }

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce (movement * speed);
    }

    void OnTriggerEnter(Collider other) 
    {
        if (other.gameObject.CompareTag ( "Pick up"))
        {
            other.gameObject.SetActive (false);
            count = count + 1;
            SetCountText ();
        }
    }

    void SetCountText ()
    {
        countText.text = "Count: " + count.ToString ();
        if (count >= 12)
        {
            winText.text = "You Win!";
        }
    }
}

*有趣的是,我刚刚注意到 INPUT 类型具有方法“GetTouch()”。也许,我可以尝试在 iPad 上使用这种方法?最初,我希望上面 C# 脚本中适用于 Mac 的通用代码也适用于 iPad?也许,我的假设是错误的,我需要用“GetTouch()”为 iPad 编写一组不同的代码?好的,我认为这是可能的解决方案,现在将尝试... *

PS:顺便说一句,截至 2017 年 2 月,我使用的是最新的 Unity(版本 5.5.2f1)和最新的 XCode(8.2.1)。我 iPad 上的 iOS 也是最新的(版本 10.2.1)。

【问题讨论】:

    标签: c# ios unity3d


    【解决方案1】:

    我从来没有在 Unity 中为 iPad 创建过任何东西,但是根据您提供的描述,我认为问题不在您的脚本中。我建议您检查输入管理器中的所有内容是否正确链接 (编辑->项目设置->输入)

    https://docs.unity3d.com/Manual/class-InputManager.html

    我认为问题在于游戏没有检测到您在 iPad 上的输入。您可以尝试在 x 轴上给小球添加一个恒定的速度,如果它移动,您可以在 Input Manager 中集中精力。

    另外,请查看此链接: http://wiki.unity3d.com/index.php?title=Basic_iOs_Input_Tutorial

    【讨论】:

    • 感谢您的 cmets。当然,让我研究一下。似乎 Mac 和 iPad 处理“用户输入”的方式不同。我希望我帖子中的通用代码对这两个平台都足够好。但是,让我读一下你的文件,看看....谢谢。 :-)
    • 没问题。我希望我可以添加自己的示例,但我没有 ipad,无法对其进行测试。
    【解决方案2】:

    您必须更改输入设置。我不知道在哪里可以找到它们,但是您可以更改输入“水平”和“垂直”。你应该多看一下这个,因为你也可以添加输入,如果你想拥有对游戏控制的所有权力,这非常有用。

    哦发现了就看前面的回答了。

    【讨论】:

    • 对不起我的英语。
    • 感谢您的意见。我会试试的。我注意到 INPUT 类型有一个方法“GetTouch()”,这可能是我可以尝试在 iPad 上使用的方法。但是,我希望 Unity 的目的是“编写一次通用代码并为所有平台构建”,而不是“为不同平台编写不同的方法来读取‘用户输入’......”但是,让我试试你的建议,看看进展如何。谢谢。
    • 这也是正确的:因为 Touch 类是一个在屏幕被触摸时被实例化的对象,你可以尝试foreach (Touch t in Input.touches) {} 并获取该触摸的属性。
    • foreach (Touch touch in Input.touches) { if (touch.phase == TouchPhase.Began) { touchbegan = true; } if (touch.phase == TouchPhase.Ended) { touchbegan = false; } if (touchbegan &amp;&amp; grounded) { myRigidBody.velocity = new Vector2(myRigidBody.velocity.x, JumpForce); }
    • 以我为例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2016-02-10
    相关资源
    最近更新 更多