unity从0开始摸鱼日记15,继续增加功能

3月28日

今天去吃了一顿大渝火锅,属实舒服

准备继续完善小球的视觉效果,在高速移动时改变小球形状,发射时时间减慢

变形这部分,我首先就想到在update中加一个函数,根据速度调节形状

初版本是这样的:首先这个函数要在fixedupdate中执行,不然帧数不够会导致卡顿,在每次update的最后获取一次物体的速度,这样下次执行变形函数的时候可以调用前一帧的物体速度,然后获取这一帧的速度,对他们的绝对值作差,x,y轴的差作为localscale的参数传进去,实现变形

代码如下:

 private void changeCricle()
    {
        float bx = System.Math.Abs(beforeVelocity.x);
        float by = System.Math.Abs(beforeVelocity.y);
        float nx = System.Math.Abs(rb.velocity.x);
        float ny = System.Math.Abs(rb.velocity.y);


        float x = (nx-bx)*0.5f;
        float y = (ny-by)*0.5f;
        transform.localScale += new Vector3(x, y, 0)*0.01f;
    }

但是发现这样有一个问题,只有在垂直或者水平运动时效果显著,在斜向运动时没有什么效果,并且因为在加速运动时只有增量,没有减量,就造成xy轴都增大,小球的体积都增大了,就很不合理,需要找别的方法

我想到的是,在fixedupdate中,时刻将小球的朝向指向运动的方向,这样只需要在运动的方向增大x轴并减小y轴就行

但是这个旋转,好难,要把xy坐标转换成z轴角度

最终还是让我给研究出来了吧!!崽种!!

if (!Input.GetKey(KeyCode.Mouse0))
        {
            Vector3 v = new Vector3(rb.velocity.x, rb.velocity.y, 0);
            //首先获得目标方向
            float angle = Vector3.SignedAngle(Vector3.up, v, Vector3.forward);
            //得到围绕z轴旋转的角度
            Quaternion rotation = Quaternion.Euler(0, 0, angle);
            //利用角度得到rotation
            transform.rotation = rotation;
         }

在速度过小的时候因为反弹的原因会导致反复抖动,所以在if中添加最小速度限制

接下来,准备在蓄力时时间减慢,便于瞄准,这个简单,在按下和松开的判定中分别添加time.timescale的设置就行

已经11点了吗

那就先这样吧

哦,还有准备调节一下fixupdate,让游戏更加流畅一点,毕竟我有时间减缓

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

猜你喜欢

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