nixMWGD
New member
Hey everyone!
I didn't like that the tracers looked more like a laser than they look in most shooters so I decided to update it to move over time.
It's based on the older Call of Duty games that only used hitscan for weapons. Shots hit instantly but the tracer still travels over time as a visual effect.
This is the Opsive Tracer script with my changes. My demo uses
I didn't like that the tracers looked more like a laser than they look in most shooters so I decided to update it to move over time.
It's based on the older Call of Duty games that only used hitscan for weapons. Shots hit instantly but the tracer still travels over time as a visual effect.
This is the Opsive Tracer script with my changes. My demo uses
Code:
public class Tracer : MonoBehaviour
{
public float m_VisibleTime;
public float length;
// Component references
private Transform m_Transform;
private LineRenderer m_LineRenderer;
private Vector3 startPoint;
private Vector3 endPoint;
private float visibleTime;
/// <summary>
/// Initialize the default values.
/// </summary>
private void Awake()
{
m_Transform = transform;
m_LineRenderer = GetComponent<LineRenderer>();
}
private void OnEnable()
{
visibleTime = 0;
}
public void Initialize(Vector3 hitPoint)
{
startPoint = m_Transform.position;
endPoint = hitPoint;
Scheduler.Schedule(m_VisibleTime, DestroyObject);
}
private void Update()
{
visibleTime += Time.deltaTime;
m_LineRenderer.SetPosition(0, Vector3.Lerp(m_Transform.position, endPoint, visibleTime / m_VisibleTime));
m_LineRenderer.SetPosition(1, Vector3.Lerp(m_Transform.position + ((endPoint - m_Transform.position) * length), endPoint, visibleTime / m_VisibleTime));
}
private void DestroyObject()
{
ObjectPool.Destroy(gameObject);
}
}