Jump to content
Unity Insider Forum
Sign in to follow this  
Teddy Terror

Hilfe bei Würfel rollen

Recommended Posts

hi leute,

 

ich habe mein erstes kleineres problem...

bezüglich würfel rollen.

ich möchte sobald der spieler eine taste drückt(w,a,s,d)

der würfel in die jeweilige richtung rollt/kippt.

!wichtig ist das es pro tastendruck einmalig passiert!

 

ich habe verschiedene tutorials angeschaut hinsichtlich "objekte bewegen".

auch unterschiedliche scripte ausprobiert.

haben aber nicht die lösung gehabt die ich erhofft hatte.

 

vielleicht hat ja einer von euch eine idee oder ein tipp

wie ich das gelöst bekomme...

 

 

ich werde mich weiterhin bei google und youtube durchschauen.

falls ihr meine scripts braucht,kann ich sie nachreichen.

 

danke schonmal für die hilfe

lg teddy terror

Share this post


Link to post
Share on other sites

hi

mein problem ist.

das der spieler sich nicht 1x in eine richtung bewegt.

sondern konstant solange die taste gedrückt wird.

 

hier meine beiden scripts.

 

using UnityEngine;
using System.Collections;
public class Bewegen : MonoBehaviour
{
public float Geschwindigkeit;
public float Beschleunigung;
float aktuelleGeschwindigkeit = 0;
Vector3 richtung = Vector3.zero;
void Start()
{
}
void Update()
{
	if (EingabeÜberprüfen())
	{
		if (aktuelleGeschwindigkeit < Geschwindigkeit)
		{
			aktuelleGeschwindigkeit += Beschleunigung * Time.deltaTime;
		}
		this.transform.position += richtung * aktuelleGeschwindigkeit * Time.deltaTime;
	}
	else
	{
		aktuelleGeschwindigkeit = 0f;
	}
}
private bool EingabeÜberprüfen()
{
	bool eingabe = false;
	float x = 0f;
	float z = 0f;
	// Input.GetKey gibt true zurück wenn
	// die gefragte Taste gedrückt ist
	if (Input.GetKey(KeyCode.RightArrow))
	{
		x++;
		eingabe = true;
	}
	if (Input.GetKey(KeyCode.LeftArrow))
	{
		x--;
		eingabe = true;
	}
	if (Input.GetKey(KeyCode.UpArrow))
	{
		z++;
		eingabe = true;
	}
	if (Input.GetKey(KeyCode.DownArrow))
	{
		z--;
		eingabe = true;
	}
	richtung = new Vector3(x, 0f, z);
	return eingabe;
}
}

 

using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
private Rigidbody rb;
// Use this for initialization
void Start () {
	rb = GetComponent<Rigidbody>();
}

// called per frame, before performing physics
void FixedUpdate()
{
	float moveHorizontal = Input.GetAxis("Horizontal");
	float moveVertical = Input.GetAxis("Vertical");
	Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
	rb.AddForce(movement * speed);
}
}

 

hoffe das hilft

 

vielen dank

Share this post


Link to post
Share on other sites

Ein Würfel, der umkippt und sich somit immer genau eine eigene Kantenlänge weit bewegt und nicht dreht, ist absolut kein Fall für einen Rigidbody mit AddForce.

Den irgendwie physikalisch motiviert zu drehen ist auch ganz stark am Ziel vorbei.

Was du willst ist eine Kipp-Animation und ein kleines Skript, das in etwa so aussieht:

public class CubePlayer : MonoBehaviour
{
 private Animator animator;

 void Awake()
 {
animator = GetComponent<Animator>();
 }

 void Update()
 {
var input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));

var direction = GetDirectionFrom(input);

if(direction.sqrMagnitude > 0)
{
  transform.rotation = Quaternion.LookRotation(direction); //Drehe Würfel so, dass er in die Richtung schaut, in die er kippen soll
  transform.position += direction; //Teleportiere das Objekt an die neue Position
  animator.SetTrigger("RollOver"); //Starte die Roll-Animation
}
 }

 private static Vector3 GetDirectionFrom(Vector2 input)
 {
if(Mathf.Abs(input.x) > Mathf.Abs(input.y))
{
  input.x = Mathf.Round(input.x);
  input.y = 0;
}
else
{
  input.x = 0;
  input.y = Mathf.Round(input.y);
}
return new Vector3(input.x, 0, input.y);
 }
}

Das Skript geht jetzt davon aus, dass dein Würfel von allen Seiten gleich aussieht und es damit nicht auffällt, wenn man ihn ruckartig um 90° dreht.

Wird in eine Richtung gedrückt, wird der Würfel gedreht und teleportiert. Außerdem wird die Roll-Animation gestartet, die für dieses beispiel so gemacht sein muss, dass der Würfel sich aus Richtung -z auf Position 0,0,0 rollt.

  • Like 1

Share this post


Link to post
Share on other sites

hi,

erstmal vielen dank für die antwort.

die scripts hatte ich ausgewählt weil sie beide

in einer gewissen art das tun was ich brauche^^

 

ich habe jetzt mal dein script ausprobiert @Sascha

und er hat mir ein fehlercode ausgeworfen.

("Quaternion" enthält keine Definition für "LookDirection")

habe dann Quaternion.LookRotation hingeschrieben.

dann hat es funktioniert.

 

also an sich ist das schon in einer weise das was ich brauche.Aber.

1.das der würfel in die richtung dreht in die er kippt ist zwar gut.

soll er aber höchstens mit spezieller taste können.

(der würfel soll sich praktisch in jede richtung kippen lassen)

2.es sollen später nicht nur würfel kippen,sondern verschiedene formen.

man kann sich vorstellen so ne art Tetris 3d

 

wie gesagt vielen dank für eure hilfe.

ps.:ich habe gesehen das du tutorials machst,

dann werde ich mich erstmal da durch arbeiten^^

 

Lg teddy

Share this post


Link to post
Share on other sites

LookRotation ist richtig, hab's mal bei mir verbessert :)

 

Durch die Tutorials ackern ist eine gute Idee, auch wenn die noch für JavaScript sind.

Wenn du danach noch Fragen hast, sag bescheid :)

  • Like 1

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...