延迟在对象中附加重力

问题描述

我有一个可以从左到右移动的球,它还有一个重力,它会增加加班时间。
问题:我如何将重力附加/添加到对象上延迟大约 3 秒。
期望:一开始我仍然可以在没有重力的情况下将球从左向右移动,因此在 y 轴的位置相同,但 3 秒后球将有重力并开始下落。

public class PlayerController : MonoBehavIoUr
{
    //Init
    public Vector2 speedMinMax;
    public Vector2 gravityMinMax;
    float speed;
    float move;
    float gravity;
    float halfPlayerWidth;
    private float screenHalfWidthInWorldUnit;
    //Components
    Rigidbody2D rigidbody2D;

    void Awake()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();
    }

    public void Start()
    {
        SpawnPlayer();
        halfPlayerWidth = transform.localScale.x / 2f;
        screenHalfWidthInWorldUnit = Camera.main.aspect * Camera.main.orthographicSize + halfPlayerWidth;
    }

    void Update()
    {
        IncreaseGravity();
        PlayerBounds();
    }

    void FixedUpdate()
    {
        Playerinput();
    }

    void SpawnPlayer()
    {
        transform.position = new Vector2(0,Camera.main.orthographicSize - transform.localScale.y - 2f);
    }

    void Playerinput()
    {
        //PlayerInput
        //Keyboard
        speed = Mathf.Lerp(speedMinMax.x,speedMinMax.y,Difficulty.GetDifficultyPercent());
        move = Input.GetAxis("Horizontal");
        rigidbody2D.veLocity = new Vector2(move * speed,rigidbody2D.veLocity.y);
    }
    
    void IncreaseGravity()
    {
        gravity = Mathf.Lerp(gravityMinMax.x,gravityMinMax.y,Difficulty.GetDifficultyPercent());
        rigidbody2D.gravityScale = gravity;
    }
}

解决方法

RigidBody2D.gravityScale 组件控制附加对象的重力。您可以创建一个协程并将 gravityScale 设置为 0 以禁用。 3 秒后将其设置为旧值或所需值。 `

IEnumerator WaitForGravity()
 {
     rigidbody2d.gravityScale = 0;
     yield return new WaitForSeconds(3);
     rigidbody2d.gravityScale = 1;
 }

在启动函数时触发这个协程。

void Start()
{
    StartCoroutine(WaitForGravity());
}