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;
}
收工,明天实现小球的抛物线运动;