所以基本上我有一个 TargetSpawner,它只是一个放在屏幕顶部的矩形形状的 BoxCollider,它会生成要射击的小寿司(TargetPrefab)。
小寿司是带有自己的 RigidBody2D 的预制件。
这个想法是,在生成 10 个寿司(TargetPrefab)后,游戏难度以这种方式增加:
我在 TargetSpawner 的脚本中执行此操作。 由于我在 TargetSpawner 的脚本内操作,所以冷却时间完全没有问题,但我不知道如何从该脚本中调用寿司的刚体 (TargetPrefab)。
`{
[SerializeField] private BoxCollider2D cd;
[SerializeField] private GameObject targetPrefab;
[SerializeField] private float cooldown;
private float timer;
public int sushiCreated;
private int sushiMilestone = 10;
void Update()
{
timer -= Time.deltaTime;
if (timer < 0)
{
timer = cooldown;
sushiCreated++;
GameObject newTarget = Instantiate(targetPrefab);
float randomX = Random.Range(cd.bounds.min.x, cd.bounds.max.x);
newTarget.transform.position = new Vector2(randomX, transform.position.y);
if (sushiCreated > sushiMilestone && cooldown > .5f)
{
sushiMilestone += 10;
cooldown -= .3f;
newTarget.GetComponent<Rigidbody2D>().gravityScale += .3f;
}
}
}
}`
我的尝试是最后一行代码“newTarget.GetComponent().gravityScale += .3f;”但目前还没有结果。
我尝试查看已发布的问题,但也没有结果。
如何调用 Prefab 的 Rigidbody 并与之交互?
我会尝试检查尝试将gravityScale更改为更大的数字是否确实有效(例如将其设置为10),如果有效,那么额外的0.3可能并不明显。
如果它不起作用(我不知道为什么它不起作用),我可能会完全放弃gravityScale,并且在您正在实例化的对象的脚本中,有一个用于增加重力的布尔值以及是否启用它(您可以在实例化它时执行此操作),每次更新对象时添加额外的力(x 值为 0,y 值为 0.3 × 重力强度(大概是 -9.81)× Time.deltaTime)重力增加
例如
using UnityEngine;
public class SushiController : MonoBehaviour
{
public bool increasedGravity=false;
void Update()
{
if(increasedGravity)
{
this.gameObject.GetComponent<Rigidbody2D>().AddForce(Physics2D.gravity*0.3f*Time.deltaTime);
}
}
}
只需将
newTarget.GetComponent<SushiController>().increasedGravity=true;
添加到实例化代码中,而不是 newTarget.GetComponent<Rigidbody2D>().gravityScale += .3f;