Unity 不会更新对象转换。



我正在开发一个小的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。

这是地球刚体的问题吗?有什么设置吗?我有点迷路了。

有办法解决这个问题吗?

非常感谢您,并原谅任何公然的错误!

因为小行星是从预制件动态展开的,它们不是游戏对象,所以在脚本上的游戏对象变量上选择的行星是预制件,而不是场景中真正的游戏对象。我不得不将这一行添加到我的spawner脚本中

if (interval > random) {

GameObject newAsteroid = Instantiate(asteroidPrefab,
GetRandomPosition(), Quaternion.identity);

newAsteroid.GetComponent<Gravity>().planet = planet;
}

在变量的顶部添加

public GameObject planet;

在编辑器中添加您的spawner脚本,拖放您的星球游戏对象。

这解决了问题。

相关内容

  • 没有找到相关文章

最新更新