JJBB/Assets/Project/Script/RenderLineScaler.cs

46 lines
1.6 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using System.Collections;
public class RenderLineScaler : MonoBehaviour
{
private const string _textureName = "_MainTex";
private Material _lineMaterial;
// x = 初始z长度y = 初始z缩放
private Vector2 _defaultScale;
private Transform _cameraTrans;
private float _uvSpeed;
public void Init(Transform cameraTrans, float uvSpeed)
{
_cameraTrans = cameraTrans;
_uvSpeed = uvSpeed;
var meshRenderer = GetComponentInChildren<MeshRenderer>();
transform.localRotation = Quaternion.identity;
_lineMaterial = meshRenderer.material;
var size = meshRenderer.bounds.size;
_defaultScale = new Vector2(size.z, transform.localScale.z);
}
public void UpdatePoint(Vector3 source, Vector3 target)
{
transform.position = source;
var delta = target - source;
if (delta == Vector3.zero)
transform.localScale = Vector3.zero;
else
{
var z = delta.normalized;
var y = _cameraTrans.position - (transform.position + delta * 0.5f);
if (y == Vector3.zero)
transform.localScale = Vector3.zero;
else
{
var scale = delta.magnitude / _defaultScale.x * _defaultScale.y;
transform.localScale = new Vector3(1f, 1f, scale);
transform.localRotation = Quaternion.LookRotation(z, y);
_lineMaterial.SetTextureOffset(_textureName, new Vector2(0f, Time.time * _uvSpeed));
_lineMaterial.SetTextureScale(_textureName, new Vector2(1f, scale));
}
}
}
}