Wie kann man in Unity3d einen Charakter steuern?

In diesem Beitrag möchte ich einen relativ einfachen Ansatz zeigen, wie man in Unity3d einen Charakter steuern kann. Sicher gibt es auch hier eine ganze Menge an Lösungsansätzen, ich für meinen Teil bin bis jetzt aber super mit dem folgenden ausgekommen, gerade wenn es um die Steuerung einfacher Charaktere geht.

CharaktersteuerungUnity3d

Für dieses Beispiel erstelle ich einen Cube als Untergrund und darauf einen kleinen Cube der meinen Charakter darstellt.

 CharacterMovement.js

#pragma strict

/***************************************************************************
 * Dateiname: CharacterMovement.js 
 * Author: Enrico Sadlowski
 * Datum: 03.06.2013 08:22
 * 
 * Beschreibung:
 * Script zum Steuern eines Characters.
 * Der benötigte CharacterController wird automatisch zugewiesen.
 * Dieses Script einfach dem Charakter zuweisen der bewegt werden soll.
 ***************************************************************************/

@script RequireComponent(CharacterController);

var WalkingSpeed : float = 3.0;     //Geschwindigkeit beim gehen
var RunningSpeed : float = 6.0;     //Geschwindigkeit beim rennen
var JumpHeight : float = 5.0;       //Geschwindigkeit beim springen
var Gravity : float = 9.8;          //Gravitation
var canJump : boolean = true;       //Angabe ob Charakter springen kann
var rotatationSpeed : float = 100;  //Geschwindigkeit der Drehung

private var moveDirection : Vector3 = Vector3.zero;
private var airTime : float = 0;    //Zeit in der der Charakter beim springen in der Luft ist

function Update () 
{
  var controller : CharacterController = GetComponent(CharacterController);

  if (controller.isGrounded) 
  {
    moveDirection = Vector3(Input.GetAxis("Horizontal"), -1, Input.GetAxis("Vertical"));
    moveDirection = transform.TransformDirection(moveDirection);

    airTime = 0;

    if(Input.GetAxis("Vertical") > 0 && Input.GetKey("left shift"))
    {
      moveDirection *= RunningSpeed; 
    }
    else 
    {
      moveDirection *= WalkingSpeed;
    }

    if (Input.GetButtonDown("Jump") && canJump) 
    {
      moveDirection.y = JumpHeight;
    }
    else 
    {
      airTime += Time.deltaTime;
    }
  }	
  moveDirection.y -= Gravity * Time.deltaTime;

  controller.Move(moveDirection * Time.deltaTime);
  var newRotation : float = Input.GetAxis("Horizontal") * rotatationSpeed;
  controller.transform.Rotate(0, newRotation * Time.deltaTime, 0);
}

Nachdem das Script dem Charakter zugewiesen wurde, werden im Inspektor-Fenster ein Character Controller und das Character Movement Script angezeigt. Im nächsten Schritt können Sie nun die Geschwindigkeit für gehen (Walking Speed), laufen (Running Speed), Höhe beim springen (Jump Height), Schwerkraft (Gravity), sowie die Geschwindigkeit mit der sich der Charakter drehen soll anpassen. Außerdem haben Sie die Möglichkeit anzugeben ob der Charakter springen kann oder nicht.

Unity3d-Character-bewegen

 

LookAtTarget.js

Das folgende kleine Script nutze ich um die Kamera immer auf meinen Charakter schauen zu lassen. So kann ich den Charakter steuern ohne dass er aus dem Sichtfeld der Kamera verschwindet.

#pragma strict

/********************************************************************************
 * Dateiname: LookAtTarget.js 
 * Author: Enrico Sadlowski
 * Datum: 03.06.2013 08:22
 * 
 * Beschreibung:
 * Dieses Script richtet ein Objekt immer in Richtung des angegebenen Ziels aus
 * z.B. einen Charakter immer in Richtung der Kamera oder einen Feind 
 * immer in Richtung des Charakters.
 ********************************************************************************/

var Target : Transform;

function Update () 
{
  transform.LookAt(Target);
}

Dieses Script weisen Sie Ihrer Kamera zu.
Anschließend geben Sie im Inspektor Fenster hinter Target Ihren Charakter an.

LookAtTarget

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast. nefilim3006 ist auch bei Google+ vertreten

Kommentare geschlossen.