我正在尝试制作一个脚本,我可以移动球,水平和垂直。我设法让它工作。
但现在我想让我的球跳起来#34;我以下面的脚本结束了,但现在我的球刚刚像火箭xD一样发射了
任何人都可以帮助我
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
public float speed;
public float jumpSpeed;
public GUIText countText;
public GUIText winText;
private int count;
void Start()
{
count = 0;
SetCountText();
winText.text = " ";
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0, moveVertical);
Vector3 jump = new Vector3 (0, jumpSpeed, 0);
GetComponent<Rigidbody>().AddForce (movement * speed * Time.deltaTime);
if (Input.GetButtonDown ("Jump"));
GetComponent<Rigidbody>().AddForce (jump * jumpSpeed * Time.deltaTime);
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "PickUp") {
other.gameObject.SetActive(false);
count = count +1;
SetCountText();
}
}
void SetCountText()
{
countText.text = "Count: " + count.ToString();
if (count >= 10)
{
winText.text = "YOU WIN!";
}
}
}
答案 0 :(得分:1)
在对象上添加连续力时,跳跃不起作用。首次按下跳转按钮时,您必须对对象施加一次脉冲。这种冲动也不包括时间因素,因为它只应用一次。所以你会得到这样的东西:
bool jumping;
if (Input.GetButtonDown ("Jump") && !this.jumping);
{
GetComponent<Rigidbody>().AddForce (jumpForce * new Vector3(0,1,0));
this.jumping = true;
}
另请注意,在您的示例中,您将向上单位向量乘以两倍的跳跃速度。进入jump
向量初始化,然后进入AddForce
方法。
当然,您还必须确保重力适用于将物体拉回(如果物体撞击地面,则重置跳跃布尔。
一般情况下,根据您正在制作的游戏类型,您可以更轻松地自行设置对象的速度,而不必使用Unity物理引擎来进行简单的移动。
答案 1 :(得分:0)
您的代码在FixedUpdate
函数中出错:
if (Input.GetButtonDown ("Jump"));
以这种方式,你在每一帧都对你的对象施加一个力,因为分号排除了条件下面的行。通过删除分号,只要在RigidBody组件上启用了UseGravity,就会在跳转的情况下实现正确的if实现。
if (Input.GetButtonDown ("Jump"))
GetComponent<Rigidbody>().AddForce (jump * jumpSpeed * Time.deltaTime);
希望它有所帮助。
答案 2 :(得分:0)
谢谢大家,这是一个很大的帮助。我现在有一个跳跃的角色。一个只能在接地时跳起来的人。
public bool IsGrounded;
void OnCollisionStay (Collision collisionInfo)
{
IsGrounded = true;
}
void OnCollisionExit (Collision collisionInfo)
{
IsGrounded = false;
}
if (Input.GetButtonDown ("Jump") && IsGrounded)
{
GetComponent<Rigidbody>().velocity = new Vector3(0, 10, 0);
}