Unity3D如何通过鼠标点击位置2D

时间:2016-03-30 18:05:08

标签: unity3d

我想了两天。我仍然没有取得任何进展。 我想知道如何在2D视图中远离鼠标点击位置?

我尝试过这样:

        pos = Input.mousePosition;
        Vector3 realWorldPos = Camera.main.ScreenToViewportPoint(pos);
        print("MOuse pos: " + realWorldPos);

        //print(realWorldPos);
        Vector3 velo = GetComponent<Rigidbody2D>().velocity;

        if (realWorldPos.x < 0.5)
        {
            velo = new Vector3((realWorldPos.x * speed), velo.y);
        }
        else if(realWorldPos.x > 0.5)
        {
            velo = new Vector3((realWorldPos.x * speed) * (-1), velo.y);
        }
        if (realWorldPos.y < 0.5)
        {
            velo = new Vector3(velo.x, realWorldPos.y * speed);
        }
        else if (realWorldPos.y > 0.5)
        {
            velo = new Vector3(velo.x, (realWorldPos.y * speed) * (-1));
        }

        GetComponent<Rigidbody2D>().velocity = velo;

但它不能按我的意愿工作。

是否可以这样做?

1 个答案:

答案 0 :(得分:2)

为此,Rigidbody2D必须将Gravity Scale设置为0。

这是一个适合我的简单测试代码,放在精灵对象上:

public class PushPlayer : MonoBehaviour
{
    public float pushPower = 50.0f;

    Rigidbody2D rb;

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

    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Vector3 dir = transform.position - Camera.main.ScreenToWorldPoint(Input.mousePosition);
            dir = dir.normalized;

            rb.AddForce(dir * pushPower, ForceMode2D.Force);

            // as alternative:
            rb.velocity = dir * pushPower;
        }
    }
}

你需要稍微调整一下这些值,也可以在regidbody中调整(比如拖动),以便按照你想要的方式调整它。

编辑:

transform.position - Camera.main.ScreenToWorldPoint(Input.mousePosition):计算从鼠标位置到玩家位置的方向向量(如果你不熟悉,可以看看向量代数),这是远离点击的方向(直线)

dir.normalized:这会将矢量缩短为1的长度(=幅度)(再次查看矢量),所以它实际上只是一个方向。你可以省略这个并减少因子,但这样做你的因子等于你使用的力。