- Home /
I changed from Character COntroller to Rigidbody/Collider but how do i change component script?
I just changed my target(the Player) of my Enemy from a Character Controller to a RigidBody/Collider
But how do i change the script then where my Enemy picks up the location of my character(cause he used to getcomponents from that script)
Sorry for the dutch comments [code] using UnityEngine; using System.Collections;
public class EnemyAI : MonoBehaviour { public enum MonsterState // de states { unaware, alerted, attack
} ;
//______variabelen________________________
public Transform target; // vergeet niet de player een tag te geven
public int moveSpeed;
public int rotationSpeed;
public AudioClip au_monsterAtt;
public Camera camera;
public int maxDistance;
public int medDistance;
public int minDistance;
public MonsterState gameState = MonsterState.unaware; // dit is een variable om de state aan te roepen als parameter ofzo
private Transform myTransform;
private CharacterController controller; // anders beweegt ie niet, is als component aan de enemy toegevoegd
//triggercounter
private int triggerPoint;
private int unawareTrigger;
private int alertedTrigger;
private int attackTrigger;
private int totalTrigger;
// audio
public AudioClip au_suspense;
//_____awake______________________________
void Awake ()
{
myTransform = transform; // wordt gecached zodat hij altijd de transform info heeft
}
//_____start______________________________
void Start ()
{
//wanneer hetspel begint vindt de enemy de speler eerst
GameObject go = GameObject.FindGameObjectWithTag ("Player"); // tag de enemy en de player in inspector
target = go.transform; // dit is weer een variable die later wordt gebruikt en hier wordt de target opgeslagen van de findtag //go is de naam van de gameobject
camera.enabled = true;
minDistance = 1;
medDistance = 3; // dit is een andere distance omdat ie anders vanaf alerted meteen switched naar attack, nu geven we de speler een kans terug te gaan
maxDistance = 5; //zo blijven ze op afstand
unawareTrigger = 2;
alertedTrigger = 4;
attackTrigger = 6;
totalTrigger = 0;
controller = GetComponent ();// dit is nodig omdat deze variabele straks wordt gebruikt, en dit roept het aan
}
// _______onGUi___________________________
void OnGUI ()
{
GUI.Label (new Rect(10,50,300,30),"Triggers: " + triggerPoint + "/" + totalTrigger); //dit laat de score zien in tekst
if (GUI.Button (new Rect (Screen.width - 300,Screen.height - 300, 100, 30), "unaware"))
{
gameState = MonsterState.unaware;
Debug.Log ("switch to unaware");
}
if (GUI.Button (new Rect (Screen.width - 300,Screen.height - 330, 100, 30), "alerted"))
{
gameState = MonsterState.alerted;
Debug.Log ("switch to alerted");
}
if (GUI.Button (new Rect (Screen.width - 300,Screen.height - 360, 100, 30), "attack"))
{
gameState = MonsterState.attack;
Debug.Log ("switch to attack");
}
}
//_____update_____________________________
void Update ()
{
//de states worden continue gechecked of ze van toepassing zijn
switch (gameState) {
case MonsterState.unaware: // let op dubbele punt niet punt komma
Unaware (); // hier wordt de functie ingevoerd die actief is in deze state, voer hier alle andere functies en if statements in
break;
case MonsterState.alerted:
Alerted ();
break;
case MonsterState.attack:
Attack ();
break;
}
}
// de triggerpoint unawareTrigger =3; alertedTrigger = 6; attackTrigger = 7; totalTrigger = 0;
public void TriggerCount ()
{
triggerPoint++;
if(triggerPoint >= unawareTrigger && triggerPoint <= attackTrigger ) // 4 5 6
{
gameState = MonsterState.alerted;
}
if(triggerPoint >= alertedTrigger ) // 7 +
{
gameState = MonsterState.attack;
}
if(triggerPoint <= unawareTrigger) // 0 1 2
{
gameState = MonsterState.unaware;
}
// if (){ trigger.TriggerCount();} dit in de triggercolliders //
// foundEggs++; // if (foundEggs >= totalEggs) // {
// WonGame ();
// } }
private void Unaware()
{
//idle
// de movement tijdens unaware - monster blijft vanaf maxdistance altijd met zijn rug naar de speler
if (Vector3.Distance (target.position, myTransform.position) > maxDistance)
{
Vector3 moveDirection = target.transform.position - transform.position;
moveDirection.Normalize ();
moveDirection.y = 0; // zo gaat ie niet draaien
transform.LookAt (transform.position - moveDirection);
}
// de speler is te dichtbij en nu ziet het monster hem, de speler kan nog terug
if (Vector3.Distance (target.position, myTransform.position) < medDistance)
{
gameState = MonsterState.alerted;
}
}
private void Alerted()
{
// kijkt naar de speler - maakt geluid - muziek wordt spannender - licht en donker?
audio.PlayOneShot(au_suspense);
// de movement tijdens alerted - het monster kijkt continu de speler aan
Vector3 moveDirection = target.transform.position - transform.position;
moveDirection.Normalize ();
moveDirection.y = 0; // zo gaat ie niet draaien
transform.LookAt (transform.position + moveDirection);
// het monster kijkt al naar de speler: als de speler nu nog dichterbij komt dan gaat ie aanvallen
if (Vector3.Distance (target.position, myTransform.position) < minDistance)
{
gameState = MonsterState.attack;
}
}
private void Attack ()
{
// dit berekent de move tussen enemy en player - bepalend op de maxdistance
// de movement tijdens alerted - het monster gaat naar de speler toe (helaas tot op zijn hoofd)
// if (Vector3.Distance (target.position, myTransform.position) > minDistance) // {} // else
if (Vector3.Distance (target.position, myTransform.position) < maxDistance || triggerPoint >= alertedTrigger)
{
Vector3 moveDirection = target.transform.position - transform.position;
moveDirection.Normalize ();
moveDirection.y = 0; // zo gaat ie niet draaien
controller.Move (moveDirection * moveSpeed * Time.deltaTime); // hier vlgt/beweegt ie de controller functie boven aangeven met getcomponent
transform.LookAt (transform.position + moveDirection); //hierdoor blijft ie gericht op de Lookat target en draaitt ie langzaam die richting op
}
if(Vector3.Distance (target.position, myTransform.position) < 1)
{
camera.enabled = false;
Debug.Log("Camera off");
}
}
}
[/code]
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
bullets kill all enemies, not just the ones hit. 1 Answer
Character Rotation 2 Answers