Hi , I’ve attached a Raycast function to my gun in order to tell it where do i hit and where to create the particle effect. And after that I’ve created an animation to it so it can look more realistic , but you can guess that i can shoot and apply damage faster then i can run the animation , so i want to make the raycast to take a 1second break until he can shoot again…
earlier today i followed a tutorial about making youre enemy attack slower and i thought why not do the same to the raycast function…is it posible? if it is how to do it?
Theres my Raycast function :
#pragma strict
var hitEffect : Transform;
var TheDamage = 100;
function Update ()
{
var hit : RaycastHit;
var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));
if(Input.GetMouseButtonDown(0))
{
if (Physics.Raycast (ray, hit, 100)) // 100 = How far the bullet can get , means how far the bullet reaches from you and on...
{
var particleClone = Instantiate(hitEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(particleClone.gameObject, 2);
hit.transform.SendMessage("ApplyDamage", TheDamage, SendMessageOptions.DontRequireReceiver);
}
}
}
And theres a similar code applied to my enemy :
var Distance;
var Target : Transform;
var lookAtDistance = 25.0;
var chaseRange = 15.0;
var AttackRange = 1.5;
var moveSpeed = 5.0;
var Damping = 6.0;
var Controller : CharacterController;
var gravity : float = 20.0;
var attackRepeatTime = 2;
var attackTime : float;
private var MoveDirection : Vector3 = Vector3.zero;
function Start ()
{
attackTime = Time.time;
}
function Update()
{
Distance = Vector3.Distance (Target.position, transform.position);
if(Distance < lookAtDistance)
{
lookAt();
}
if(Distance > lookAtDistance)
{
renderer.material.color = Color.green;
}
if (Distance < AttackRange)
{
attack();
}
else if(Distance < chaseRange)
{
chase();
}
}
function lookAt()
{
renderer.material.color = Color.yellow;
var rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
}
function chase()
{
renderer.material.color = Color.red;
moveDirection = transform.forward;
moveDirection *= moveSpeed;
moveDirection.y -= gravity * Time.deltaTime;
Controller.Move(moveDirection * Time.deltaTime);
}
function attack()
{
if(Time.time > attackTime)
{
Debug.Log ("Attack");
attackTime = Time.time + attackRepeatTime;
}
}
function ApplyDamage()
{
lookAtDistance += 30;
chaseRange += 30;
moveSpeed += 1;
}
The code that make him slower is in the attack function…
so what do i need to add to my raycast function in order to make it shoot\applydamage with a delay of 1 second?