[英]Is there a way to rotate an object based on players position in unity 2d
[英]best funktion to rotate to mouse position unity 2d
我看了一个教程,他是这样做的:
public Rigidbody2D rb;
public Camera cam;
Vector2 movement;
Vector2 mousePos;
void Update()
{
mousePos = cam.ScreenToWorldPoint(Input.mousePosition);
}
private void FixedUpdate()
{
Vector2 lookDir = mousePos - rb.position;
float angle = Mathf.Atan2(lookDir.y ,lookDir.x) * Mathf.Rad2Deg - 90f;
rb.rotation = angle;
}
但我想我可以用更简单的方式做到这一点:
Vector3 mousePosition;
void Update()
{
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = mousePosition - transform.position;
transform.up = direction;
}
它有效,但我想“他为什么要以如此复杂的方式来做?它是不是更有效的东西?” 这正是我无法摆脱的问题。
没有理由使用FixedUpdate
进行相机更新。 实际上,建议使用LateUpdate()
,因为它跟踪可能在 Update 中移动的对象。 检查文档。
关于效率,我会说你的方式更有效,但为了确保我会检查设置一些计时器并检查哪种方式更有效,一些无用for
s 只是为了效率研究,例如:
测量1:
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
for (int i = 0; i<1000000; i++) {
Vector2 lookDir = mousePos - rb.position;
float angle = Mathf.Atan2(lookDir.y ,lookDir.x) * Mathf.Rad2Deg - 90f;
rb.rotation = angle;
}
watch.Stop();
Debug.LogError($"elapsed: {watch.ElapsedMilliseconds} ms");
测量2:
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
for (int i = 0; i<1000000; i++) {
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = mousePosition - transform.position;
transform.up = direction;
}
watch.Stop();
Debug.LogError($"elapsed: {watch.ElapsedMilliseconds} ms");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.