球物体在没有重力的情况下减速

时间:2018-07-15 17:06:35

标签: c# unity3d

我正在制作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);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题不在代码中,而是在游戏重力设置中。您可以通过以下两种方式之一解决它:

1)更改球的重力比例-转到球游戏对象或Prefab,然后查看RigidBody2D组件。在那里,您有一个称为“重力比例”的字段,通常设置为1。将其更改为0.1将使您的球轻盈快速。但是,此设置不适用于具有多个关卡的游戏。 Gravity Scale on the Ball

2)在项目设置中更改全局重力。在“编辑”菜单中转到“项目设置”,然后在菜单中选择“ Physics2D”:

Project Settings Physics2D

在打开的面板中,您通常具有-9.81的现实重力比例。将其更改为-1。 enter image description here 这将使游戏中的所有对象都变亮,并减少所有级别的重力保持力。在破砖游戏中,只有球松动并扔到一边,这才是最合理的。

答案 1 :(得分:0)

如果您希望球具有恒定的速度,则可以在Update

的每一帧中进行设置。
myRigidbody.velocity = speed * (myRigidbody.velocity.normalized);

myRigidBody是在脚本中某处声明的私有RigidBody,并在Start()中这样设置

myRigidbody = this.GetComponent<Rigidbody>();

因为您不想在每一帧都调用GetComponent