所以我目前正在开始编程,我对这个话题很感兴趣。
我确实从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";
}
}
}
我是所有这一切的新手,尤其是编码,任何有助于我理解语言解释方式的内容都会受到高度赞赏! 谢谢!
答案 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);
}