Unity3D 雷电激光攻击LineRender和光线投射

最近在学习Unity3D游戏开发,练习制作飞机大战的2D游戏,但激光的效果不知道如何实现,经过网上查询和调试,做了一个激光的摸拟效果。

1.首先,组件准备,如图

Player: 飞机 

fire: 子弹和激光的发射点(因为激光射线也是碰撞体,所以发射点要放在Player的前面,不能重叠,会影响光线投射)

line和line1为激光和电光效果

MoveControl脚本拖入Player控件飞机操作,同时加入BOM爆作效果对象,主要参数如图:

fire为一个空对象,放在Player的前方就行,为射线的发射点

line和line1设置如图:

1.去掉linerenderer的对勾,禁用linerenderer,因为我们要通过脚本控制

2.两个line都使用 Use World Space

3.第一个line加上Materials,为激光的样式贴图

4.因为激光只有一个起始点和终点,即两个点所以line的Size设置2,line1电光效果可以有多个节点,这里我们设置为6个

5,将所有Position节点设置为0,我们将在脚本中控制

主要代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveControl : MonoBehaviour { 

public Transform fire;//射线发射点
public GameObject bom;
public LineRenderer lineRenderer;
public LineRenderer lineRenderer2;//射线2在射线1上产生电光效果
public float minpos = -0.35f;    //电光效果每个节点的最小值
public float maxpos = 0.35f;     //最大值
 
void Update () {
       //按下L键,开启激光 
       if(Input.GetKey(KeyCode.L))
        {            
            lineRenderer.enabled = true;
            lineRenderer2.enabled = true;
            shotline();     //显示激光
            shotline2();    //显示电光
        }

        //按键弹起后,禁用激光
        if (Input.GetKeyUp(KeyCode.L))
        {
            lineRenderer.enabled = false;
            lineRenderer2.enabled = false;
        }	
}
void shotline()//激光
    {
        RaycastHit2D hit;
        hit = Physics2D.Raycast(fire.position,Vector2.up);
        //光线投射,返回障碍物
        if (hit && lineRenderer.enabled == true)//如果遇到障碍物且射线打开
        {
            enemy enemy = hit.transform.GetComponent<enemy>();
            if (enemy!=null)
            {
                Instantiate(bom, hit.point, Quaternion.identity);//在障碍物处产生爆炸效果
                enemy.transform.position = new Vector3(Random.Range(-4.5f, 4.5f), 5.5f, 0);
            }
            else
                Destroy(hit.transform.gameObject);

            //射线的起始点
            lineRenderer.SetPosition(0, fire.position);

            //因为激光只有一个终点,所以障碍物位置为终点
            lineRenderer.SetPosition(1, hit.point);
          
        }
        else
        {
            lineRenderer.SetPosition(0, fire.position);
            lineRenderer.SetPosition(1, fire.position + Vector3.up * 100);
        }
}

void shotline2()//电光6个节点
    {
        if (lineRenderer2.enabled == true)
        {
            lineRenderer2.SetPosition(0, fire.position );
            lineRenderer2.SetPosition(1, fire.position+new Vector3(Random.Range(minpos,maxpos),0.5f,0));
            lineRenderer2.SetPosition(2, fire.position +new Vector3(Random.Range(minpos, maxpos), Random.Range(1.5f, 2.5f), 0));
            lineRenderer2.SetPosition(3, fire.position+new Vector3(Random.Range(minpos, maxpos), Random.Range(2.5f, 3.5f), 0));
            lineRenderer2.SetPosition(4, fire.position+new Vector3(Random.Range(minpos, maxpos), Random.Range(3.5f, 4.5f), 0));
            lineRenderer2.SetPosition(5, fire.position + new Vector3(0, 6.5f, 0));
        }
    }

}

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序人生起波澜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值