2017-04-19 97 views
0

所以我现在开始编程,并且我对这个主题很感兴趣。带加速度计的移动/滚动球

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

我做了与团结的基本教程的第一场比赛。

我还不能真正理解C#的复杂性。 (使用Visual Studio,不知道是否应该切换到崇高和如何)

这个游戏是关于移动一个球和收集东西。 在PC上,通过箭头键上的AddForce和Vector3运动,它工作得很好。虽然我想尝试为移动设备制作这款游戏​​,但我想过的不是输入屏幕,而是使用移动设备的陀螺仪。我在Unity API文档中找到了“gyro”变量(?),但我并不真正知道如何定义它,只是为了移动x和z轴,所以球不会从桌面开始飞离。我试着用加速器变量,但究竟发生这种情况,即使寿y轴被设置为0 下面的代码是我在游戏对象“玩家”到目前为止,(?):

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

你很幸运能让程序员帮助你!享受Unity,很有趣 – Fattie

+1

@Fattie Joe对不对?你有没有改变你的名字? – Programmer

+1

大声笑我做@Programmer - 我不知道你可以改变你的昵称! – Fattie

回答

3

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

没错。网上有很多C#教程。只要了解基本的C#东西,你应该在Unity中很好。如果你不这样做,你可以用Unity做的事情会受到限制。

要回答你的问题,你需要加速度计而不是陀螺仪传感器。另外,从更新功能中删除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); 
} 
+0

非常感谢! <3 –