如何改变预制件的重力?

问题描述 投票:0回答:1

所以基本上我有一个 TargetSpawner,它只是一个放在屏幕顶部的矩形形状的 BoxCollider,它会生成要射击的小寿司(TargetPrefab)。

小寿司是带有自己的 RigidBody2D 的预制件。

这个想法是,在生成 10 个寿司(TargetPrefab)后,游戏难度以这种方式增加:

  1. 生成寿司之间的冷却时间减少
  2. 寿司增加的重力比例。

我在 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 并与之交互?

c# unity-game-engine gravity prefab
1个回答
0
投票

我会尝试检查尝试将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;

© www.soinside.com 2019 - 2024. All rights reserved.