【问题标题】:How to track transform.position in real time?如何实时跟踪transform.position?
【发布时间】:2021-05-13 10:05:21
【问题描述】:

我正在开发一款小型 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),它不会随着行星的运动实时更新。因此,如果我将行星移动到屏幕的一角,小行星仍然会被吸引到它的中心。

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

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

【问题讨论】:

  • 你用Vector3 v = planet.transform.position - transform.position;更新力的方向,所以力的方向应该随着行星运动而更新......

标签: c# unity3d game-physics gravity


【解决方案1】:

有两种方法可以快速到达物体:

  1. 将对象发送给播放器,每次更新时只需使用planet.transform.position

  2. 首先使用look at 旋转到植物,然后使用vector3.forword 作为移动方向。

第一个解决方案不适合您,因此您可能想尝试第二个解决方案。

无论如何,如果你的 lookAt 部分也不起作用,你可以使用

 Vector3 dir = target.position - transform.position;
 float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
 transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

Vector3 targetPos = target.transform.position;
 Vector3 targetPosFlattened = new Vector3(targetPos.x, targetPos.y, 0);
 transform.LookAt(targetPosFlattened);

【讨论】:

  • 它没有改变任何东西,除了planet.transform.position即使在移动后也保持在0,0,0之外,Debug.Log每个值都发生了变化
  • 你能添加你的代码,这样我就可以看到问题所在了吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多