unity从0开始摸鱼日记14,FightingBall!

本文介绍了一种在Unity中实现鼠标控制小球射击的方法。通过在鼠标按下时记录位置,松开时计算与小球之间的差值向量,以此调整小球速度,使其沿连线方向发射。同时利用LineRenderer绘制瞄准线,增强用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值