Jump to content
Unity Insider Forum
Sign in to follow this  
Certas

Player bewegt sich nicht

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...