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

3月15日

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

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

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

我的想法是

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

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

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

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

5.将偏移量赋给小球

6.完美!

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

扫描二维码关注公众号,回复: 10859409 查看本文章

经过思考我决定换个思路

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

所以现在我要做的就是,按下时,获取鼠标位置,松开时,获取鼠标位置,并在松开时将这个位移差向量转化成力向量,赋值给小球,然后我解决的终极问题就是,我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;
    }

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

发布了39 篇原创文章 · 获赞 0 · 访问量 1450

猜你喜欢

转载自blog.csdn.net/Z3Djoker/article/details/104877868