kevios105 Geschrieben 12. Oktober 2017 Melden Share Geschrieben 12. Oktober 2017 Hallo erst einmal, ich bin ziemlich neu in Unity und habe hier ein Script wo ich einfach nicht eine feste Distanz zwischen Follower und Player hinbekomme... Das Script soll folgendes einfach machen: Player folgen und eine gewisse Distanz zum Spieler immer einhalten und wenn der Player sich nicht bewegt soll der "Follower" automatisch in die "Idle" Animation gehen und nicht weiter laufen bis der Player sich wieder bewegt... Ganz am ende soll es ein "Follower Pet" sein bzw. ein Begleiter der aber auch Gegner die sich in einer gewissen Distanz befinden automatisch attackieren. Aber soweit komme ich gerade noch nicht wegen eben dieser Distanz... Ich bin wirklich sehr neu in Unity und in C++ sowie JS aber ich gebe mein bestes aber ich bin echt am verzweifeln >.< Wenn mir einer bitte helfen könnte wäre ich sehr dankbar und natürlich würde ich mich auch freuen wenn jemand das mit dem Automatischen Attackieren wenn ein Gegner in Range ist auch mir zeigen könnte aber das ist kein "muss" ... ich werde es auch selbst irgendwie dann hinbekommen (hoffe ich doch ^^)... Vielen dank für jede Hilfe! hier das Script was ich bisher habe: var Player : Transform; var moveSpeed = 3; //move speed var rotationSpeed = 3; //speed of turning var myTransform : Transform; var ragdoll : GameObject; var agent : UnityEngine.AI.NavMeshAgent;//current transform data of this enemy var isNotDead : boolean = true; var health : float = 100; var distance : float = 3.0f; function Awake() { myTransform = transform; //cache transform data for easy access/preformance } function Start() { agent = GetComponent.<UnityEngine.AI.NavMeshAgent>(); } function Update () { if(health < 1){ isNotDead = false; Destroy(gameObject); Instantiate (ragdoll, myTransform.position, myTransform.rotation); } if(isNotDead){ //rotate to look at the player var distance = Vector3.Distance(Player.position, myTransform.position) ; if (distance < 1.0f) { GetComponent.<Animator>().Play("Idle"); } else{ //move towards the player agent.SetDestination(Player.position); GetComponent.<Animator>().Play("Walk"); myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(Player.position - myTransform.position), rotationSpeed*Time.deltaTime); } } } function OnTriggerEnter(collider : Collider) { if(collider.tag == "Player") { GetComponent.<Animator>().Play("sound"); GetComponent.<AudioSource>().Play(); yield WaitForSeconds (2); Player = GameObject.FindWithTag("Player").transform; } } function ApplyDamage(dmg : float){ health -= 20; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 12. Oktober 2017 Melden Share Geschrieben 12. Oktober 2017 Ich würde es mal so probieren. Ist aber ungetestet (Unity 2017). Ist aber aktuell nur für einen maximalen Abstand, d.h. der Begleiter geht nicht auf Abstand, wenn der Spieler zu nah kommt. var followDistance : float = 10f; var distance = Vector3.Distance(Player.position, myTransform.position) ; if (distance < followDistance) { agent.isStopped = true; GetComponent.<Animator>().Play("Idle"); } else{ //move towards the player agent.isStopped = false; agent.SetDestination(Player.position); GetComponent.<Animator>().Play("Walk"); myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(Player.position - myTransform.position), rotationSpeed*Time.deltaTime); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
kevios105 Geschrieben 12. Oktober 2017 Autor Melden Share Geschrieben 12. Oktober 2017 Vielen Dank erst einmal für die schnell Antwort! Ich habe es natürlich gleich ausprobiert leider bekomme ich nun diesen Fehler in der Console angezeigt: Assets/Petfollow.js(39,17): BCE0005: Unknown identifier: 'NavMeshAgent'. Ich schätze mal das ich NavMeshAgent erst definieren muss? Wenn ja wie? // Edit habe das nun so versucht UnityEngine.AI.NavMeshAgent anstatt das NavMeshAgent und nun bekomme ich zwar keinen Fehler direkt angezeigt in der Console aber das "Pet" folgt mir nun auch nicht mehr egal was für eine Distanzgröße ich eingebe, wenn ich ihm aber dann zu nahe komme, bekomme ich folgenden Fehler in der Console angezeigt MissingFieldException: UnityEngine.AI.NavMeshAgent.isStopped Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.FindExtension (IEnumerable`1 candidates) Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.Create (SetOrGet gos) Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.CreateSetter () Boo.Lang.Runtime.RuntimeServices.DoCreatePropSetDispatcher (System.Object target, System.Type type, System.String name, System.Object value) Boo.Lang.Runtime.RuntimeServices.CreatePropSetDispatcher (System.Object target, System.String name, System.Object value) Boo.Lang.Runtime.RuntimeServices+<SetProperty>c__AnonStorey19.<>m__F () Boo.Lang.Runtime.DynamicDispatching.DispatcherCache.Get (Boo.Lang.Runtime.DynamicDispatching.DispatcherKey key, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.SetProperty (System.Object target, System.String name, System.Object value) Petfollow.Update () (at Assets/Petfollow.js:39) Bin da jetzt total überfordert um ehrlich zu sein mit dem Fehler o.O Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
kevios105 Geschrieben 13. Oktober 2017 Autor Melden Share Geschrieben 13. Oktober 2017 Konnte das ganze nun Lösung mit Froze = true; aber vielen Dank für deine schnelle Hilfe! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 13. Oktober 2017 Melden Share Geschrieben 13. Oktober 2017 Nein, war mein Fehler, ich habe oben den Code noch einmal geändert. Bei deinem Code hieß der Navmesh-Agent "agent". Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.