UNITY简单2D光线反射效果
前⾔:
最近⼀个项⽬需要,我得了解⼀下Unity下2D灯光如何实现反射,特来⼀篇教程——原视频链接太长了,不能复制过来,有兴趣请去b站UP主——EvadeGame
2D灯光反射
先在2D场景中创建⼏个2D物体,并赋予碰撞盒
然后我们创建⼀个sprite,我这⾥起名叫:LaserGun,
并写给这个sprite写⼀个脚本——LaserGun.cs
然后我们在Unity场景中创建⼀个激光线
简单调整⼀下光线属性,然后把它让在LaserGun的下⾯,成为它的⼦物体,注意这时要将LineRenderer的UseWorldSpace勾选上(如果你不把他作为⼦物体,在后⾯的代码⾥从外⾯拖拽,那就不⽤这样了)
下⾯是核⼼代码:
public class LaserGun : MonoBehaviour
{
//Laser 本体
private LineRenderer laser;
//存储 Laser 经过的路径的列表
public List<Vector3> laserPoint = new List<Vector3>();
private void Start()
{
laser = transform.Find("Line").GetComponent<LineRenderer>();
unity 教程}
private void Update()
{
//使LaserGun以⼀定速度旋转
transform.Rotate(Vector3.forward * 10f * Time.deltaTime);
if (Input.GetKey(KeyCode.Space))
{
laser.gameObject.SetActive(true);
CasetLaser();
laser.positionCount = laserPoint.Count;
laser.SetPositions(laserPoint.ToArray());
}
else {
laser.gameObject.SetActive(false);
}
}
void CasetLaser() {
//清空旧的LaserPoint
laserPoint.Clear();
//从Laser Gun的位置出发
Vector3 startPoint = transform.position;
//发射⽅向
Vector3 direction = transform.right;
/
/有了第⼀个出发点
laserPoint.Add(startPoint);
int i = 0;
do
{
RaycastHit2D hitInfo=Physics2D.Raycast(startPoint, direction);
//添加射线击中点到路径中
laserPoint.Add(hitInfo.point);
//新的发射⽅向
/*借助Unity内置的reflect函数,可以通过⼊射向量(inDirection)
和法向量(al),得到反射后的向量derection。
但是 startPoint已经改变了,所以先求⽅向
*/
direction = Vector2.Reflect(hitInfo.point-(Vector2)startPoint, al);
//将下⼀次发射起点设定为击中点
startPoint = (Vector3)hitInfo.point+direction*0.01f;
i++;
} while (i<6);
}
}
商业转载 请联系作者获得授权,⾮商业转载 请标明出处,谢谢
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论