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.
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.
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.
The post Wie kann man in Unity3d einen Charakter steuern? appeared first on Fluuux - TechBlog.