触摸板无法识别输入
Input not recognised from touchpad
我正在尝试扩展此 Roll-a-Ball tutorial 以包含一个计时器,并允许用户通过点击触摸板再次尝试,无论他们是赢了还是 运行 超时。
如果时间 运行 结束(下图 // case A
),但如果玩家获胜(下图 // case B
),这将按预期工作,其中水龙头似乎不是认可。结束消息出现在这两种情况下,所以它肯定到达了那些部分,但我猜测程序没有到达评论 // reset on tap
的部分,但我不确定。
任何想法表示赞赏。
我的 PlayerController
脚本:
void Start ()
{
timeLeft = 5;
rb = GetComponent<Rigidbody>();
count = 0;
winText.text = "";
SetCountText ();
}
void Update()
{
if (!gameOver) {
timeLeft -= Time.deltaTime;
}
timerText.text = timeLeft.ToString ("0.00");
if(timeLeft < 0) {
winner = false;
GameOver(winner);
}
}
void GameOver(bool winner)
{
gameOver = true;
timerText.text = "-- --";
string tryAgainString = "Tap the touch pad to try again.";
if (!winner) { // case A
winText.text = "Time's up.\n" + tryAgainString;
}
if (winner) { // case B
winText.text = "Well played!\n" + tryAgainString;
}
// reset on tap
if (Input.GetMouseButtonDown (0)) {
Application.LoadLevel(0);
}
}
void FixedUpdate ()
{
float moveHorizontal = Input.GetAxis ("Mouse X");
float moveVertical = Input.GetAxis ("Mouse Y");
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 ();
if (!gameOver) {
timeLeft += 3;
}
}
}
void SetCountText ()
{
if (!gameOver) {
countText.text = "Count: " + count.ToString ();
}
if (count >= 12) {
winner = true;
GameOver(winner);
}
}
在SetCountText方法中放一个Debug.Log,输出count计数的值。您可能永远不会达到 12 分大关。
确保您所有的收藏品都带有“拾取”标签。
更新
您应该在 Update
方法中监听玩家输入。 FixedUpdate
和作为固定更新的一部分执行的任何其他功能将错过玩家输入,如果它发生在两次 FixedUpdate
调用之间。
所以改变你的Update
和GameOver
方法如下:
void Update() {
if (gameOver) {
if (Input.GetMouseButtonDown(0)) {
Application.LoadLevel(0);
}
} else {
timeLeft -= Time.deltaTime;
timerText.text = timeLeft.ToString("0.00");
if (timeLeft < 0) {
winner = false;
GameOver(winner);
}
}
}
void GameOver(bool winner) {
gameOver = true;
timerText.text = "-- --";
string tryAgainString = "Tap the touch pad to try again.";
if (!winner) { // case A
winText.text = "Time's up.\n" + tryAgainString;
}
if (winner) { // case B
winText.text = "Well played!\n" + tryAgainString;
}
}
我正在尝试扩展此 Roll-a-Ball tutorial 以包含一个计时器,并允许用户通过点击触摸板再次尝试,无论他们是赢了还是 运行 超时。
如果时间 运行 结束(下图 // case A
),但如果玩家获胜(下图 // case B
),这将按预期工作,其中水龙头似乎不是认可。结束消息出现在这两种情况下,所以它肯定到达了那些部分,但我猜测程序没有到达评论 // reset on tap
的部分,但我不确定。
任何想法表示赞赏。
我的 PlayerController
脚本:
void Start ()
{
timeLeft = 5;
rb = GetComponent<Rigidbody>();
count = 0;
winText.text = "";
SetCountText ();
}
void Update()
{
if (!gameOver) {
timeLeft -= Time.deltaTime;
}
timerText.text = timeLeft.ToString ("0.00");
if(timeLeft < 0) {
winner = false;
GameOver(winner);
}
}
void GameOver(bool winner)
{
gameOver = true;
timerText.text = "-- --";
string tryAgainString = "Tap the touch pad to try again.";
if (!winner) { // case A
winText.text = "Time's up.\n" + tryAgainString;
}
if (winner) { // case B
winText.text = "Well played!\n" + tryAgainString;
}
// reset on tap
if (Input.GetMouseButtonDown (0)) {
Application.LoadLevel(0);
}
}
void FixedUpdate ()
{
float moveHorizontal = Input.GetAxis ("Mouse X");
float moveVertical = Input.GetAxis ("Mouse Y");
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 ();
if (!gameOver) {
timeLeft += 3;
}
}
}
void SetCountText ()
{
if (!gameOver) {
countText.text = "Count: " + count.ToString ();
}
if (count >= 12) {
winner = true;
GameOver(winner);
}
}
在SetCountText方法中放一个Debug.Log,输出count计数的值。您可能永远不会达到 12 分大关。 确保您所有的收藏品都带有“拾取”标签。
更新
您应该在 Update
方法中监听玩家输入。 FixedUpdate
和作为固定更新的一部分执行的任何其他功能将错过玩家输入,如果它发生在两次 FixedUpdate
调用之间。
所以改变你的Update
和GameOver
方法如下:
void Update() {
if (gameOver) {
if (Input.GetMouseButtonDown(0)) {
Application.LoadLevel(0);
}
} else {
timeLeft -= Time.deltaTime;
timerText.text = timeLeft.ToString("0.00");
if (timeLeft < 0) {
winner = false;
GameOver(winner);
}
}
}
void GameOver(bool winner) {
gameOver = true;
timerText.text = "-- --";
string tryAgainString = "Tap the touch pad to try again.";
if (!winner) { // case A
winText.text = "Time's up.\n" + tryAgainString;
}
if (winner) { // case B
winText.text = "Well played!\n" + tryAgainString;
}
}