代码拉取完成,页面将自动刷新
同步操作将从 洪镇津/Damage Num VFX 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
using System.Collections;
using UnityEngine;
using UnityEngine.VFX;
namespace IOMB2.Assets.Scripts._1_Test
{
public class DamageNumTest : MonoBehaviour
{
[SerializeField] VisualEffect vfx;
[SerializeField] int spawnNumCountPerFrame;// 每帧生成数量
[SerializeField] Vector2 damageNumRange;// 数字大小范围
[SerializeField] float spawnCoordRange;// 数字随机范围
[SerializeField] Color[] colors;
GraphicsBuffer damageNumBuffer;
GraphicsBuffer colorBuffer;
Vector4[] damageNums;
void Start()
{
damageNumBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, spawnNumCountPerFrame, 16);// Vertor4 4Byte * 4
damageNums = new Vector4[spawnNumCountPerFrame];
colorBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colors.Length, 16);
colorBuffer.SetData(colors);
vfx.SetGraphicsBuffer("DamageData", damageNumBuffer);
vfx.SetGraphicsBuffer("ColorData", colorBuffer);
}
private void OnDestroy()
{
damageNumBuffer?.Release();
colorBuffer?.Release();
}
// Update is called once per frame
void Update()
{
Vector2 minCoord = Vector2.zero;
Vector2 maxCoord = new Vector2(spawnCoordRange, spawnCoordRange);
for (int i = 0; i < spawnNumCountPerFrame; i++)
{
float x = UnityEngine.Random.Range(minCoord.x, maxCoord.x);
float y = UnityEngine.Random.Range(maxCoord.y, minCoord.y);
float num = UnityEngine.Random.Range(damageNumRange.x, damageNumRange.y);// 游戏中就是设置实际的伤害值了.现在这里随机
float colorIndex = UnityEngine.Random.Range(0, colors.Length);// 指定数字的颜色索引
damageNums[i] = new Vector4(x, y, num, colorIndex);
}
damageNumBuffer.SetData(damageNums);
vfx.SetInt(countID, damageNums.Length);// Count是指定此次要生成的数字粒子数量,正常游戏过程中每帧的数字并不一样,在测试这里是一样的
vfx.Play();
}
int countID = Shader.PropertyToID("Count");
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。