unity从0开始摸鱼日记9,自己的尝试1

本文记录了使用Unity2D开发一款简单的弹珠游戏的过程,从创建圆形单元并赋予其物理属性开始,到实现鼠标拖动控制小球弹射,最后讨论了在开发过程中遇到的问题及解决方案。

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

3月15日

跟着做了两个项目,一味的模仿让我有点疲劳,打算自己尝试做点东西出来,看了B站一个搬运的12小时完成游戏,打算做一个类似的demo,像弹珠游戏之类的小东西

新建一个prefab,圆,要知道圆超酷的,给他添加circle collider 2d和rigidbody,并给他添加重力属性,这样他就可以下落了,接下来需要让他碰到物体就弹起,新建一个Physic Material2d,将弹性属性bounciness设置为合适的数值,并将这个材质拖到我们完美的circle上,这样他就有弹性了,接下来进入难点,其实也不算难点,只是因为我比较菜

让小球向鼠标拖动方向进行移动,好了,冲

我的想法是

1.检验是否按下鼠标左键

2.按下时获取鼠标当前坐标

3.获取鼠标松开时的坐标

4.松开时的坐标减去当前坐标就是偏移量

5.将偏移量赋给小球

6.完美!

那么问题来了,怎么让脚本在鼠标按下时获取位置,在鼠标松开时获取位置呢

经过思考我决定换个思路

在鼠标移动的方向上给物体施加一个同方向的力,将他抛出

所以现在我要做的就是,按下时,获取鼠标位置,松开时,获取鼠标位置,并在松开时将这个位移差向量转化成力向量,赋值给小球,然后我解决的终极问题就是,我tm不知道用什么函数可以检测鼠标按下和松开的时机获取坐标,我试着用onmousedown和onmouseup,一个是在鼠标按下时触发,一个是在鼠标松开时触发,看上去很nice,但是不大行,不知道问题出在哪里

 

经过好久,终于还是让我整出来了

private Vector2 mouseNow;
    private Vector2 mouseAfter;
    private Vector2 offset;
    private bool isMouseDown;
    private bool isMouseUp;
    private Rigidbody2D myRigidbody;

    private void Awake()
    {
        myRigidbody = GetComponent<Rigidbody2D>();

    }

    private void Start()
    {
        

    }

    private void Update()
    {
        //if(isMouseDown)
        // {
        //     mouseNow = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        // }

            if (Input.GetMouseButtonDown(0))
                mouseNow = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            if (Input.GetMouseButtonUp(0))
                mouseAfter = new Vector2(Input.mousePosition.x, Input.mousePosition.y);

            if (isMouseDown)
            {

                offset = mouseAfter - mouseNow;
                myRigidbody.AddForce(new Vector2(0.05f, 0.05f), ForceMode2D.Impulse);
            }

    }

    private void OnMouseDown()
    {
        isMouseDown = false;
    }

    private void OnMouseUp()
    {
        isMouseDown = true;
    }

收工,明天实现小球的抛物线运动;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值