【问题标题】:Unity doesn't update object transform.positionUnity 不更新对象 transform.position
【发布时间】:2021-05-19 10:01:00
【问题描述】:

我正在开发一款小型 2d 游戏,您可以在其中控制一颗行星以躲避来袭的小行星。我正在通过以下方式实现重力:

public class Gravity : MonoBehaviour
{
 Rigidbody2D rb;

 Vector2 lookDirection;

 float lookAngle;

 [Header ("Gravity")]
 
 // Distance where gravity works
 [Range(0.0f, 1000.0f)]
 public float maxGravDist = 150.0f;
 
 // Gravity force
 [Range(0.0f, 1000.0f)]
 public float maxGravity = 150.0f;
 
 // Your planet
 public GameObject planet;

 void Start()
 {
     rb = GetComponent<Rigidbody2D>();
 }

 void Update()
 {   
     // Distance to the planet
     float dist = Vector3.Distance(planet.transform.position, transform.position);

     // Gravity
     Vector3 v = planet.transform.position - transform.position;
     rb.AddForce(v.normalized * (1.0f - dist / maxGravDist) * maxGravity);

     // Rotating to the planet
     lookDirection = planet.transform.position - transform.position;
     lookAngle = Mathf.Atan2(lookDirection.y, lookDirection.x) * Mathf.Rad2Deg;

     transform.rotation = Quaternion.Euler(0f, 0f, lookAngle);  
 }
}

问题是小行星被吸引到行星的初始生成点 (0,0),它不会随着行星的运动实时更新。因此,如果我将行星移动到屏幕的一角,小行星仍然会被吸引到它的中心。

当我对每个值使用 Debug.Log 时,除了planet.transform.position 保持在 0,0,0 之外,所有值都会发生变化,即使在移动它之后也是如此。

是行星刚体的问题吗?有什么设置吗?我有点迷茫。

有没有办法解决这个问题?

非常感谢,如有严重错误,敬请原谅!

【问题讨论】:

  • this 1.0f - dist / maxGravDist = 1.0f - 150 / 150 = 0 所以你可能不会增加任何力量?
  • 但是如果我不加任何力量,小行星怎么还在移动?
  • 嘿,您可能想检查一下您分配给planet 字段的游戏对象。也许看看场景层次并检查行星本身是否是某个静止游戏对象的子对象。
  • @rustyBucketBay 实际上是1 - dist / maxGravDist = 1 - ? / 150 != 0 除了? 正好是150 ;)
  • 是的,150 是默认值,所以如果编辑器中没有值,就会出现这种情况。那是我的观点。谢谢:)

标签: c# unity3d 2d game-physics game-development


【解决方案1】:

因为小行星是从预制件动态生成的,它们不是游戏对象,所以在脚本的游戏对象变量上选择的行星是预制件,而不是场景中的真实游戏对象。我必须将此行添加到我的生成器脚本中

如果(间隔>随机){

游戏对象 newAsteroid = Instantiate(asteroidPrefab, GetRandomPosition(), Quaternion.identity);

newAsteroid.GetComponent().planet = 行星;

}

在变量的顶部添加

公共 GameObject 星球;

然后在编辑器的生成器脚本中拖放你的星球 游戏对象

这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多