我通过倾斜手机来控制游戏对象,并且需要在游戏开始时手机旋转时保持平衡

Posted

技术标签:

【中文标题】我通过倾斜手机来控制游戏对象,并且需要在游戏开始时手机旋转时保持平衡【英文标题】:I control the gameobject by tilting the phone and need to keep it balanced in whatever the rotation of the phone is when game starts 【发布时间】:2021-11-15 04:39:39 【问题描述】:

我上周发布了一款名为 Rotate Ball Pro 的游戏。但也有人告诉我,玩这个游戏不太舒服。 我使用统一和 C# 进行编码。我的游戏关卡上有迷宫和一个球体。球体具有刚体组件,但迷宫没有。因此,您可以通过倾斜手机来控制迷宫,从而使球体滚动。但是您必须将手机与地面平行以保持迷宫平衡。例如,您不能仰卧或以任何角度握住手机进行游戏。所以这让玩起来很不舒服。 无论游戏开始时手机的旋转是什么,我都想保持迷宫的平衡。我在网上搜索并尝试了很多东西,但无法解决。谁能帮帮我?

下面是图片问题的解释:Problem

这里是直接游戏链接:Rotate Ball Pro

这是我的代码:

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

[System.Serializable]

public class NewMovementScript : MonoBehaviour

    public float multiplier = 0;
    void Start()
    
        Input.gyro.enabled = true;
        Screen.sleepTimeout = SleepTimeout.NeverSleep;
    
    void FixedUpdate()
    
        var dir = Vector3.zero;
        dir.x = Input.acceleration.x * -1 * multiplier;
        dir.y = Input.acceleration.z * multiplier;
        dir.z = Input.acceleration.y * multiplier;
        transform.eulerAngles = new Vector3(dir.z, 0f, dir.x);
    

【问题讨论】:

【参考方案1】:

Input.acceleration 是最后一帧和当前帧之间的位置变化,正如您已经指出的那样,它没有考虑初始状态。

这也与旋转几乎没有关系。

我认为对于您的使用,您宁愿简单地使用Input.gyro.attitude

文档中的示例

public class Example : MonoBehaviour

    // Rotate the object to match the device's orientation
    // in space.
    void Update()
    
        transform.rotation = Input.gyro.attitude;
    

如果您的对象使用刚体,您可能更愿意使用

public class Example : MonoBehaviour

    private Rigidbody rigidbody;

    void Awake ()
    
        rigidbody = GetComponent<Rigidbody>();
    

    void FixedUpdate()
    
        rigidbody.MoveRotation(Input.gyro.attitude);
     

【讨论】:

以上是关于我通过倾斜手机来控制游戏对象,并且需要在游戏开始时手机旋转时保持平衡的主要内容,如果未能解决你的问题,请参考以下文章

Apple TV 游戏在大屏幕上出现倾斜

将安卓手机变成游戏手柄,通过wi-Fi连接电脑

寻找一款以前玩过的手机游戏,一开始是个男主角,然后不断打败收服到好多人物,可以控制好多个角色的策略

用canvas写一个h5小游戏

相机移动时实例化游戏对象

一加acepro游戏助手怎么关闭