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();if (enemy!=null){Instantiate(bom, hit.point, Quaternion.identity);//在障碍物处产生爆炸效果enemy.transform.position = new Vector3(Random.Range(-4.5f, 4.5f), 5.5f, 0);}elseDestroy(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));}}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
