我想了两天。我仍然没有取得任何进展。 我想知道如何在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;
但它不能按我的意愿工作。
是否可以这样做?
答案 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
的长度(=幅度)(再次查看矢量),所以它实际上只是一个方向。你可以省略这个并减少因子,但这样做你的因子等于你使用的力。