用加速度计移动/滚动球

时间:2017-04-19 18:03:06

标签: c# android api unity3d accelerometer

所以我目前正在开始编程,我对这个话题很感兴趣。

我确实从Unity游戏引擎开始;人们说这不是开始的最佳方式,而是无论如何。

我用团结的基本教程制作了第一个游戏。

我还不能真正理解C#的复杂性。 (使用Visual Studio,不确定我是否应该切换到sublime以及如何)

这场比赛是关于移动球并收集东西。 在PC上,它可以正常使用箭头键上的AddForce和Vector3移动。虽然我想尝试为移动设备制作这款游戏​​,但我想到的不是键入屏幕,而是我可能会使用移动设备的陀螺仪。我在Unity API文档中找到了“gyro”变量(?),但我真的不知道如何定义它只是为了移动x和z轴,所以球不会从桌面开始飞出。我尝试使用加速器变量(?),但确实发生了这种情况,即使y轴设置为0。 以下代码是我目前在GameObject“播放器”所拥有的代码:

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

public class AccelerometerInput : 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 = "";
}

private void Update()
{
    transform.Translate(Input.gyro.x, 0, -Input.gyro.z);
}
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("Capsule"))
    {
        other.gameObject.SetActive(false);
        count = count + 1;
        SetCountText();
    }
}
void SetCountText()
{
    countText.text = "Count: " + count.ToString();
    if (count >= 8)
    {
        winText.text = "You Win";
    }
}

}

我是所有这一切的新手,尤其是编码,任何有助于我理解语言解释方式的内容都会受到高度赞赏! 谢谢!

1 个答案:

答案 0 :(得分:3)

  

我确实从Unity游戏引擎开始,人们说它并不是最好的   开始的方式,但无论如何。

那是对的。网上有很多C#教程。只需了解基本的C#内容,你就可以在Unity中使用。如果你不这样做,你可以用Unity做的事情会受到限制。

要回答您的问题,您需要加速度计而非陀螺仪传感器。另外,从Update函数中删除transform.Translate(Input.gyro.x, 0, -Input.gyro.z);通过Rigidbody移动带有transform.Translate的对象,否则您将遇到无碰撞等问题。

这样的事情应该这样做:

Vector3 movement = new Vector3(-Input.acceleration.y, 0f, Input.acceleration.x);

您仍然需要一种方法来检测您是为移动设备还是桌面构建。这可以使用Unity的预处理器directives完成。

void FixedUpdate()
{
    Vector3 movement = Vector3.zero;

    //Mobile Devices
    #if UNITY_IOS || UNITY_ANDROID || UNITY_WSA_10_0 
    movement = new Vector3(-Input.acceleration.y, 0.0f, Input.acceleration.x);
    #else
    //Desktop 
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");
    movement = new Vector3(moveHorizontal, 0f, moveVertical);
    #endif

    rb.AddForce(movement * speed);
}