问题描述
我有一个可以从左到右移动的球,它还有一个重力,它会增加加班时间。
问题:我如何将重力附加/添加到对象上延迟大约 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());
}