我正在制作2D Block Breaker游戏;问题是我的球会在一段时间后放慢速度,但是没有重力并且弹跳力为100%,因此它应该保留所有动能。我只需要球保持恒定的速度即可。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour {
public Paddle paddle;
private Vector3 paddleToBallVector;
private bool Started = false;
void Start () {
paddleToBallVector = this.transform.position
paddle.transform.position;
print(paddleToBallVector);
//this.GetComponent<Rigidbody2D>().drag = 0f;
}
void FixedUpdate () {
if (!Started) {
this.transform.position = paddle.transform.position + paddleToBallVector;
if (Input.GetMouseButtonDown(0))
{
Debug.Log("mouse clicked, Started = " + Started);
Started = true;
this.GetComponent<Rigidbody2D>().velocity = new Vector2(2f, 10f);
}
}
}
}
答案 0 :(得分:1)
问题不在代码中,而是在游戏重力设置中。您可以通过以下两种方式之一解决它:
1)更改球的重力比例-转到球游戏对象或Prefab,然后查看RigidBody2D组件。在那里,您有一个称为“重力比例”的字段,通常设置为1。将其更改为0.1将使您的球轻盈快速。但是,此设置不适用于具有多个关卡的游戏。
2)在项目设置中更改全局重力。在“编辑”菜单中转到“项目设置”,然后在菜单中选择“ Physics2D”:
在打开的面板中,您通常具有-9.81的现实重力比例。将其更改为-1。 这将使游戏中的所有对象都变亮,并减少所有级别的重力保持力。在破砖游戏中,只有球松动并扔到一边,这才是最合理的。
答案 1 :(得分:0)
如果您希望球具有恒定的速度,则可以在Update
myRigidbody.velocity = speed * (myRigidbody.velocity.normalized);
myRigidBody
是在脚本中某处声明的私有RigidBody
,并在Start()
中这样设置
myRigidbody = this.GetComponent<Rigidbody>();
因为您不想在每一帧都调用GetComponent
。