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>();
    }
    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)
               和法向量(hit.normal),得到反射后的向量derection。
               但是 startPoint已经改变了,所以先求方向
             */
            direction = Vector2.Reflect(hitInfo.point-(Vector2)startPoint, hitInfo.normal);

            //将下一次发射起点设定为击中点
            startPoint = (Vector3)hitInfo.point+direction*0.01f;

            i++;

        } while (i<6);
    }
}

 


 

 

 

 

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

 

 

 

 

发表评论