我是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 回答
您可能没有添加足够的力来使对象向上移动 .
从技术上讲,您的代码没有任何问题 . (虽然你的问题确实有些混淆) . 问题在于你不是每一帧都向上添加任何力 .
从本质上讲,目前,当您点击播放按钮时,您的玩家对象处于自由落体状态,而您只是在按下空格键的帧上向玩家添加一个微小的力 .
要解决这个问题,这就是你应该做的事情
velocity.y
设置为0(这实际上是一种hacky方式,但它需要更多的代码)湾向玩家添加一个向上的力量,这将抵消重力的影响 . 只需使用F = mg即可获得您需要添加的力值 .
isKinematic
属性设置为true,在按空格键时将其设置为false,并在几帧(5 - 6帧)后返回true确保你的玩家对象和地面都有BoxCollider2D对撞机保持在地面上 .
你可以保存为rigidBody存储的引用,如
Rigidbody2D myRigidbody;
然后在开始时
myRigidbody = GetComponent<Rigidbody2D>();
然后你会像myRigidbody.AddForce(jumpForce);
那样使用你的jumpForce2虽然向下射击你的玩家你不应该在跳跃中需要它,因为物理和引力将适用于刚体 .如果您未在项目设置中设置输入,请尝试触发跳转