- Home /
Question by
Wesley21spelde · May 26, 2016 at 11:43 AM ·
linerendererweapon systemlaser beam
BeamWeapon Does not damage target
Hey guys whats wrong with this my beam(Linerenderer ) is tracking my enemy and hitting it but the raycast does not work my enemy does not get dammaged
also how can i incorporate a canseeTarget variable? and range?
here is my script
using UnityEngine;
using System.Collections;
public class PlasmaBeamWeapon : MonoBehaviour{
public Transform target;
private LineRenderer lineRenderer;
private float counter;
private float dist;
//
public Transform origin;
//
public float linrDrawSpeed = 6f;
public float damage = 100.0f;
RaycastHit hit;
// Use this for initialization
void Start()
{
target = GameObject.FindWithTag("Enemy").transform;
lineRenderer = GetComponent<LineRenderer>();
lineRenderer.SetPosition(0, origin.position);
lineRenderer.SetWidth(.45f, 0.2f);
dist = Vector3.Distance(origin.position, target.position);
}
// Update is called once per frame
void OnCollisionEnter(Collision col)
{
col.gameObject.BroadcastMessage("ApplyDamage", damage = 100.0f);
}
void LateUpdate()
{
target = GameObject.FindWithTag("Enemy").transform;
if (counter < dist)
{
counter += .1f / linrDrawSpeed;
float x = Mathf.Lerp(0, dist, counter);
dist = Vector3.Distance(origin.position, target.position);
Vector3 pointA = origin.position;
Vector3 pointB = target.position;
Vector3 pointAlongLine = x * Vector3.Normalize(pointB - pointA) + pointA;
lineRenderer.SetPosition(1, pointAlongLine);
Vector3 fwd = transform.TransformDirection(Vector3.forward);
if (Physics.Raycast(transform.position, fwd, 100000))
hit.transform.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver); //Call the method Apply Damage in the gameobject that is hit
}
}
}
using UnityEngine;
using System.Collections;
public class Damagereciever : MonoBehaviour
{
public float Health = 100000.0f;
public Rigidbody deadReplacement;
// public Rigidbody dead;
public void ApplyDamage(float damage)
{
Health = -damage;
if (Health <= 0.0)
Detonatin();
return;
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void Detonatin()
{
Destroy(gameObject);
// If we have a dead barrel then replace ourselves with it!
if (deadReplacement)
{
Rigidbody dead = (Rigidbody)Instantiate(deadReplacement, transform.position, transform.rotation);
// For better effect we assign the same velocity to the exploded barrel
dead.GetComponent<Rigidbody>().velocity = GetComponent<Rigidbody>().velocity;
dead.angularVelocity = GetComponent<Rigidbody>().angularVelocity;
}
}
}
Comment