72 lines
1.8 KiB
C#
72 lines
1.8 KiB
C#
using PrimeTween;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class DamageNumberParticles : MonoBehaviour
|
|
{
|
|
public TextMeshProUGUI TextMesh;
|
|
public Camera TextCamera;
|
|
private CanvasRenderer _textRenderer;
|
|
private ParticleSystem _damageParticles;
|
|
private RenderTexture _renderTexture;
|
|
private MaterialPropertyBlock _particleMaterialProps;
|
|
private ParticleSystemRenderer _particleRenderer;
|
|
private int _lastDamageNumber = -1;
|
|
|
|
void Awake()
|
|
{
|
|
_damageParticles = gameObject.GetComponent<ParticleSystem>();
|
|
_particleRenderer = gameObject.GetComponent<ParticleSystemRenderer>();
|
|
_textRenderer = TextMesh.canvasRenderer;
|
|
_particleMaterialProps = new();
|
|
_particleRenderer.GetPropertyBlock(_particleMaterialProps, 0);
|
|
_renderTexture = new RenderTexture(256, 256, 24);
|
|
TextCamera.targetTexture = _renderTexture;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
WaitForScene();
|
|
}
|
|
|
|
async void WaitForScene()
|
|
{
|
|
await Tween.Delay(1f);
|
|
SetDamageNumber(100);
|
|
}
|
|
|
|
public void SpawnDamageNumber(int damageValue, Vector3 direction)
|
|
{
|
|
SetDamageNumber(damageValue);
|
|
var particleVelocity = _damageParticles.velocityOverLifetime;
|
|
particleVelocity.x = direction.x;
|
|
particleVelocity.y = direction.y;
|
|
particleVelocity.z = direction.z;
|
|
_damageParticles.Emit(1);
|
|
}
|
|
|
|
void SetDamageNumber(int number)
|
|
{
|
|
if (_lastDamageNumber == number) return;
|
|
TextMesh.text = number.ToString();
|
|
|
|
TextCamera.enabled = true;
|
|
TextCamera.Render();
|
|
|
|
Texture2D texture2D = new(_renderTexture.width, _renderTexture.height);
|
|
RenderTexture.active = _renderTexture;
|
|
texture2D.ReadPixels(new Rect(0, 0, _renderTexture.width, _renderTexture.height), 0, 0);
|
|
texture2D.Apply();
|
|
|
|
_particleMaterialProps.SetTexture("_MainTex", texture2D);
|
|
_particleRenderer.SetPropertyBlock(_particleMaterialProps);
|
|
|
|
TextCamera.enabled = false;
|
|
_lastDamageNumber = number;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|