46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
|
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));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|