-1

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

问题是,当我尝试编写一个允许玩家使用代码移动(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’需要对象引用”。我用谷歌搜索过,建议使用 GetComponent().velocity 访问 Rigidbody2d,

所以我改变了

    Rigidbody2D.velocity = Vector2.zero;

    Rigidbody2D.AddForce(jumpForce);

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

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

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

4

2 回答 2

1

您可能没有施加足够的力来让物体向上移动。

您的代码在技术上没有问题。(尽管您的问题确实混杂了一些东西)。问题在于您没有在每一帧都向上添加任何力。

本质上,此刻,您的播放器对象在您按下播放按钮的那一刻处于自由落体状态,并且您仅在按下空格键的帧上向播放器添加了微小的力。

为了解决这个问题,这就是你应该做的

  1. 增加一个向上的力来抵消每一帧的重力。您可以通过两种方式做到这一点。一个。在检测到空格键之前将刚体设置velocity.y为 0(这确实是一种 hacky 方式,但它就足够了,不需要更多代码)

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

  2. 您也可以isKinematic在 Player 的刚体上将属性默认设置为 true,在按下空格键时将其设置为 false,并在几帧(5 - 6 帧)后返回 true

于 2015-09-11T11:34:49.237 回答
0

确保您的玩家对象和地面都具有 BoxCollider2D 对撞机以保持在地面之上。

您可以保留为刚体存储的参考,例如Rigidbody2D myRigidbody;

然后在开始放置myRigidbody = GetComponent<Rigidbody2D>();时,您会像myRigidbody.AddForce(jumpForce);jumpForce2 一样使用它,虽然它正在向下射击您的玩家,但您在跳跃中不需要它,因为物理和重力将适用于刚体。

如果您的输入未在项目设置中设置,请尝试使用

Input.GetKeyDown(KeyCode.Space);
于 2015-09-12T15:40:44.660 回答