首页 文章

Unity3d飞扬的鸟教程 - 空间按钮不工作

提问于
浏览
-1

我是Unity3d的初学者 . 我有一些android编程背景,但没有任何C#经验 . 我要做的第一件事是根据本教程http://anwell.me/articles/unity3d-flappy-bird/创建一个flappy bird game的克隆,称为flappy plane .

问题是,当我尝试编写允许玩家使用代码移动(player.cs)的脚本时

using UnityEngine;

using System.Collections;


public class player: MonoBehaviour {



public Vector2 jumpForce = new Vector2(0,300);

public Vector2 jumpForce2 = new Vector2(0,-300);
// Use this for initialization


// Update is called once per frame

void Update () {


if (Input.GetKeyUp("space")){

    Rigidbody2D.velocity = Vector2.zero;

    Rigidbody2D.AddForce(jumpForce);


 }

}
}

我收到一个错误“访问非静态成员'UnityEngine.Rigidbody2D.velocity'需要一个对象引用” . 我用google搜索了它,建议用GetComponent() . speed访问Rigidbody2d,

所以我改变了

Rigidbody2D.velocity = Vector2.zero;

    Rigidbody2D.AddForce(jumpForce);

GetComponent<Rigidbody2D>().velocity = Vector2.zero;

   GetComponent<Rigidbody2D>().AddForce(jumpForce);

错误消失了,我可以将脚本添加到对象中,但仍然没有得到所需的操作 - 在我点击播放后,对象变为不可见而只是跌倒,对空格键按钮没有反应 . 我究竟做错了什么?谢谢你的回答 .

2 回答

  • 1

    您可能没有添加足够的力来使对象向上移动 .

    从技术上讲,您的代码没有任何问题 . (虽然你的问题确实有些混淆) . 问题在于你不是每一帧都向上添加任何力 .

    从本质上讲,目前,当您点击播放按钮时,您的玩家对象处于自由落体状态,而您只是在按下空格键的帧上向玩家添加一个微小的力 .

    要解决这个问题,这就是你应该做的事情

    • 增加一个向上的力来反击每一帧的重力 . 你可以用两种方式做到这一点 . 一个 . 在检测空格键之前将刚体的 velocity.y 设置为0(这实际上是一种hacky方式,但它需要更多的代码)

    湾向玩家添加一个向上的力量,这将抵消重力的影响 . 只需使用F = mg即可获得您需要添加的力值 .

    • 您可以,或者在播放器的刚体上默认将 isKinematic 属性设置为true,在按空格键时将其设置为false,并在几帧(5 - 6帧)后返回true
  • 0

    确保你的玩家对象和地面都有BoxCollider2D对撞机保持在地面上 .

    你可以保存为rigidBody存储的引用,如 Rigidbody2D myRigidbody;

    然后在开始时 myRigidbody = GetComponent<Rigidbody2D>(); 然后你会像 myRigidbody.AddForce(jumpForce); 那样使用你的jumpForce2虽然向下射击你的玩家你不应该在跳跃中需要它,因为物理和引力将适用于刚体 .

    如果您未在项目设置中设置输入,请尝试触发跳转

    Input.GetKeyDown(KeyCode.Space);
    

相关问题