JJBB/Assets/Project/Script/RenderLineScaler.cs
2024-08-23 15:49:34 +08:00

46 lines
1.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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));
}
}
}
}