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