![2d6cbbcb17d807c4d834264c620d44c0.png](https://img-blog.csdnimg.cn/img_convert/2d6cbbcb17d807c4d834264c620d44c0.png)
前言
在上篇中只介绍了两种弹幕样式的生成,很明显对于一款弹幕游戏来说是远远不够的,所以本次就再来尝试还原一下东方的两种弹幕,反射子弹和曲线激光。
同样的先来看看效果
![7d4885d0749d2ccf97e59c19d94e94a9.gif](https://img-blog.csdnimg.cn/img_convert/7d4885d0749d2ccf97e59c19d94e94a9.gif)
![4ef819388831aaf0f80957c482e754fc.gif](https://img-blog.csdnimg.cn/img_convert/4ef819388831aaf0f80957c482e754fc.gif)
本文主要内容:
- 控制子弹的反射
2. 曲线激光的生成
一、子弹在矩形范围内反射
虽然标题是矩形,但同样可以控制子弹是否只在单面反射。在Unity中可以用Vector3.Reflect
public static Vector3 Reflect(Vector3 inDirection, Vector3 inNormal)
来获取到子弹与指定平面的反射角,并且有多方法来判断子弹是否到了指定平面,碰撞检测、射线、数学运算等方式。这里我就用数学方法来实现子弹反射。
首先定义矩形参数
public float RectangleX = 0; //长方形的一个边
public float RectangleZ = 0; //长方形的一个边
public Transform CenterPos; //图形中心点
如果是未旋转的矩形那么边界平面就很好计算了,就是中心点位置+长或宽/2的位置,如果是旋转过的矩形那么就需要点简单的数学计算了,这里就不再展示。
var disX = transform.position.x - CenterPos.position.x;
va