Certas Geschrieben 22. August 2019 Melden Share Geschrieben 22. August 2019 Hallo zusammen. Bin neu hier im Forum, sowie Neuling in sachen Spiele entwicklung. Bin gerade dabei mich in Unity einzuarbeiten und schaue auch fleißig Tutorials um zu Lernen. Jetzt hänge ich aber fest. Ich wollte meinen Spieler mittels Mausklick sich bewegen lassen (Diablo Style). Das Script gibt keine Fehler aus. Im Log sehe ich die Coordinaten wo ich hinklicke, aber mein Player bewegt sich leider nicht. Hier meine Code: using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClickToMove : MonoBehaviour { public float speed; public CharacterController controller; private Vector3 position; void Start() { position = transform.position; } void Update() { if(Input.GetMouseButton(0)) { locatePosition(); } } void locatePosition() { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray, out hit, 1000)) { position = new Vector3(hit.point.x, hit.point.y, hit.point.z); Debug.Log(position); } } void moveToPosition() { if(Vector3.Distance(transform.position, position)>1) { Quaternion newRotation = Quaternion.LookRotation(position-transform.position, Vector3.forward); newRotation.x = 0f; newRotation.z = 0f; transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10); controller.SimpleMove(transform.forward * speed); } } } Ich benutze Unity 2018 falls das wichtig ist. Vielen dank für eure Hilfe und einen schönen Tag wünsche ich noch. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 22. August 2019 Melden Share Geschrieben 22. August 2019 Da kann mehreres Problematisch sein. Dein Speed könnte z.B. zu gering sein und es sieht einfach so aus, als würde er nichts tun. Oder aber die >1 ist zu hoch gewählt bei: if(Vector3.Distance(transform.position, position)>1) Kann ja sein, dass dein Ziel immer weniger entfernt ist als dieser eine Meter. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. August 2019 Melden Share Geschrieben 22. August 2019 moveToPosition wird nirgendwo aufgerufen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 23. August 2019 Melden Share Geschrieben 23. August 2019 Ich vermute dass die Speed zu gering gewählt ist.... Einfacher Test, tausche: controller.SimpleMove(transform.forward * speed); zu controller.SimpleMove(transform.forward * 30); Außerdem würde ich die locatePosition Function abändern auf zirka sowas: var direction = hit.point - transform.Position; direction.y = 0.0; if (direction.magnitude > 0.5) { controller.SimpleMove(direction.normalized * speed); } Aufpassen musst du bei so Dingen dass dein Character nicht irgendwo, irgendwann beginnt zu ruckeln oder zu zucken. lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. August 2019 Melden Share Geschrieben 23. August 2019 ...oder es liegt daran, dass moveToPosition nirgendwo aufgerufen wird... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Certas Geschrieben 23. August 2019 Autor Melden Share Geschrieben 23. August 2019 Sascha hatte recht, moveToPosition habe ich vergessen :D. Trotzdem danke! 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.