上一节我们实现了盾的效果,但看起来不是很完美,今天终于搞明白是怎么回事了。
我找的图片都是128*128像素的,但游戏里面每单位是100像素。当我们用游戏中的单位来用到图片上时,始终是有偏差的。
既然知道了原因,那就好办了,有2个方法,第一个就是将PixelsPerUnit的值设置成图片的像素值,比如我这里设置成128;但因为我美术,鬼知道找的图片是多少像素的,一个个调整太烦了,所以我这边采取第二个方法,手动转换得到一个值。
那我们先来优化一下盾的表现;
/// <summary>
/// 适配sprite
/// </summary>
private void AdapterSprite()
{
InitTrans();
float diameter = _itemActionData.Radius * 2;
var rateX = diameter / _bgSprite.bounds.size.x;
var rateY = diameter / _bgSprite.bounds.size.y;
_transform.localScale = new Vector3(rateX, rateY, 1);
}
spriterender中的bounds已经为我们计算好了比率,那我们就可以直接来用实际的长度和这个做比较。
我们来看一下效果:
看起来舒服多了,完完全全贴合我们盾的一个边界。
这边还有一个判断点是否在圆内的方法也优化了一下。
/// <summary>
/// 是否在目标范围内
/// 平方算比开方节省
/// </summary>
private bool IsInTargetRadius(Vector3 target, float targetRadius)
{
float length = _virusData.Radius + targetRadius;
return (_transform.position - target).sqrMagnitude < length * length;
}
总结:今天的主要工作还是优化盾效果的表现,打磨的精细一点,这样看起来才舒服。接下来的工作可能就会很细了,因为还是想把游戏做好,所以实现一个功能可能会花几篇的时间,后面的话就要去实现一个爆炸的效果了。
传送门:独立游戏开发–索引