3月26日,下大雨
偶然间解决了之前一直耿耿于怀无法实现的小球问题,简直太爽了
即鼠标按下,点击处与小球形成一条连线,,松开后小球朝着连线的方向发射出去
思路不变,松开鼠标时获取位置,将其与小球所在位置作差得到差值vector2,将其作为参数修改小球的速度
但是需要注意的是,在获取鼠标的位置时,要将鼠标的坐标从camera参考系转换为world参考系(The World!),不然会出现bug
也将这两个坐标作为linerenderer的参数,从小球到鼠标送开点画一条直线,在按下时将line,enabled设置为true,在送开时将其设置为false,这样就可以实现在按住时出现瞄准线,松开时消失
代码如下:
public class Movement : MonoBehaviour
{
public LineRenderer line;
public Rigidbody2D rb;
public Vector3 MouseDown;
public Vector3 MouseUp;
public Vector2 MouseNow;
public Vector2 MouseAfter;
public Vector2 move;
public float moveSpeed = 200;
private void Start()
{
line = GetComponent<LineRenderer>();
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (Input.GetKey(KeyCode.Mouse0))
{
line.enabled = true;
MouseDown = transform.position;
MouseNow = transform.position;
//鼠标松开时的位置
MouseUp = Input.mousePosition;
MouseAfter = Camera.main.ScreenToWorldPoint(new Vector2( Input.mousePosition.x,Input.mousePosition.y));
line.positionCount = 2;//设置LineRenderer顶点数
line.SetWidth(0.1f, 0.1f);
line.SetColors(Color.white, Color.white);
line.SetPosition(0, new Vector3(MouseDown.x,MouseDown.y, -0));//出发点,小球的坐标
line.SetPosition(1, Camera.main.ScreenToWorldPoint(new Vector3(MouseUp.x, MouseUp.y, 0)));//结束点,世界坐标转换成屏幕坐标
}
if ((Input.GetKeyUp(KeyCode.Mouse0))){
move = MouseAfter-MouseNow;
//rb.AddForce(move*0.1f, ForceMode2D.Impulse);
rb.velocity = move * moveSpeed;
line.enabled = false;
}
}