Jump to content
Unity Insider Forum

Player bewegt sich nicht


Certas

Recommended Posts

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...