2016-03-30 53 views
0

我想了两天。我仍然没有取得任何进展。 我不知道如何做到这一点,从2D视图中的鼠标点击位置飞走?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

有PLAYER,CAMERA以下玩家与SmoothCamera2D脚本,并点击功能试图在PLAYER对象,因为我没有另一个想法。 Ofc不一定有任何范围。我确实使用了视区空间,因为当我得到前世界时我不知道如何在世界空间中做速度。 -305,3506个位置,在0-1,0-1位更容易。 – xqz

+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(再次查看矢量),因此它确实只是一个方向。你可以忽略这一点并减少因素,但这样做你的因素等于你使用的力量。

+0

它的工作原理! 你能解释一下为什么你将摄像头从位置上减去,什么是标准化的?这究竟是什么? – xqz

+0

@xqz在矢量数学中,如果你想获得方向从A到B ..它只是“B减A”。这就是Gunnar的优秀代码在那里做的。 – Fattie

+0

@xqz像乔布洛说。我已经在答案的底部提供了一些信息。 –