做个简单的网站多少钱,直播软件哪个好看,个人门户网站建设流程, align center 表示文章目录 创建Shader新建Node: UV新建Node: Split......参数说明 基于Shader创建Material创建Line创建粒子系统StartVFX创建粒子材质更改粒子系统的材质设置透明模式设置粒子效果创建一个Beam设置EndVFX效果预览激光光束管理脚本最终预览 创建Shader
Create -- Shader Gra… 文章目录 创建Shader新建Node: UV新建Node: Split......参数说明 基于Shader创建Material创建Line创建粒子系统StartVFX创建粒子材质更改粒子系统的材质设置透明模式设置粒子效果创建一个Beam设置EndVFX效果预览激光光束管理脚本最终预览 创建Shader
Create -- Shader Graph -- URP --Sprite Lit Shader Graph命名为Xray 新建Node: UV
Create NodeUV 新建Node: Split …
懒得码字了直接上图来连一连 注意颜色模式统统选择HDR 设置完左上角记得保存
参数说明
Width激光光束的宽度 Color激光光束的颜色 Speed激光光束的闪烁速度 Scale激光光束的缩放 基于Shader创建Material
鼠标右键刚刚保存的Shader然后创建Material命名为XrayMaterial 创建Line
创建一个空物体对象在子级创建一个Line 创建粒子系统StartVFX
在Line同级下创建一个空物体在创建一个粒子系统 创建粒子材质
新建一个Materialshader和base map如图 更改粒子系统的材质 设置透明模式
去除黑色部分修改刚刚新建的材质Surface Type选择Transparent 设置粒子效果
这些设置随自己的喜好修改 粒子由大变小或者由小变大
创建一个Beam
基于刚刚设置的粒子系统复制一份命名为Beam, 修改一下设置
关闭 Size over lifetime 把大小改大速度改为0生命周期改小
设置EndVFX
复制StartVFX 命名为EndVFX posion的X轴根据Line的长度来设置 效果预览 激光光束管理脚本
在上面的预览效果图中还没写管理脚本给他添加一个挂载到Xray上
using Unity.Mathematics;
using UnityEngine;public class XrayController : MonoBehaviour
{public static XrayController Instance;public GameObject HittedGameObject { get; private set; }[SerializeField]private Color xrayColor Color.red;[SerializeField]private int xrayLength 10;[SerializeField]private float xraySpeed 1.0f;[SerializeField]private float xrayWidth 1.0f;private LineRenderer lineRenderer;private Transform startVFX;private Transform endVFX;private void Awake(){Instance this;}private void Start(){lineRenderer GetComponentInChildrenLineRenderer();startVFX transform.GetChild(1);endVFX transform.GetChild(2);UpdateEndPosition();}private void Update(){UpdateEndPosition();}private void UpdateEndPosition(){Vector2 position transform.position;float rotation transform.rotation.eulerAngles.z;rotation * Mathf.Deg2Rad;var direction new Vector2(Mathf.Cos(rotation), Mathf.Sin(rotation));var hit Physics2D.Raycast(position, direction.normalized);float length xrayLength;float xrayEndRotation 180;if (hit){HittedGameObject hit.collider.gameObject;length (hit.point - position).magnitude;xrayEndRotation Vector2.Angle(direction, hit.normal);Debug.Log(xrayEndRotation);}lineRenderer.SetPosition(1, new Vector2(length, 0));Vector2 endPositon position direction * length;startVFX.position position;endVFX.position endPositon;endVFX.rotation quaternion.Euler(0, 0, xrayEndRotation);}
}
最终预览