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,让游戏更加流畅一点,毕竟我有时间减缓