繁体   English   中英

旋转到鼠标的最佳功能 position 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM