Jump to content
Unity Insider Forum
Emme73

3D sidescroller Raumschiff in links/rechts fliegen lassen...

Recommended Posts

Hi,

ich habe gerade erst mit Unity angefangen und möchte ein Defender-artiges Sidescrolling shmup entwickeln, wo der Spieler frei nach links und rechts durch den Level fliegen kann. Hab jetzt mit der Spielerschiff-Steuerung angefangenund komm schon nicht weiter :D Dem Unity Tutorial über "Transform" folgendend fliegt das Schiff vom Spieler schon rauf, runter, rechts, und links.Aber ich kriegs nicht hin, dass das Schiff nach links fliegt und dabei auch nach links guckt (und sich dafür natürlich nach links rotiert), es fliegt sozusagen immer gegen Blickrichtung nach links. Vielleicht hat jemand dazu einen Vorschlag ? Hier mein Code:

public class Player_Control : MonoBehaviour
{

    void Start()
    {


    }

    public float moveSpeed = 10f;
    public float turnSpeed = 5f;


    
    

    void Update()

    {
        if (Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

        if (Input.GetKey(KeyCode.DownArrow))
            transform.Translate(Vector3.down * moveSpeed * Time.deltaTime);

        if (Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);

        if (Input.GetKey(KeyCode.LeftArrow))

            transform.Rotate(Vector3(0,180,0), turnSpeed * Time.deltaTime);
            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

 

Liebe Grüsse,

Emmanuel

Share this post


Link to post
Share on other sites

Erst einmal solltest du dir Klammern angewöhnen.

if (Bedingung)
{
  Dann Zeug
}

Im Gegensatz zu Python reicht es bei C# nicht aus, einfach die Sachen einzurücken. Deshalb solltest du dir angewöhnen, immer Klammern hinzuschreiben, auch wenn es möglich ist, sie bei einzelnen Zeilen wegzulassen. Die Diskussion hatten wir auch gerade in einem anderne Thema.

Zum eigentlichen Problem: Bau dir einen Input-Vektor, benutze ihn für einen einzelnen Translate-Aufruf (auch wenn du dabei nicht lange bleiben solltest, aber das ist ein anderes Thema), und dann nutze ihn außerdem für die Drehung. Oder du drehst einfach nur und bewegst dich dann vorwärts in die jeweilige Richtung.

// Habe hier mal versucht, den Vektor an dein Richtungsschema anzupassen
// TODO Ggf. ändern
var input = new Vector3(0, Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"));

if (input != Vector3.zero)
{
  // Rechne aus, wo du dich in Abhängigkeit zum Input hindrehen willst
  var targetRotation = Quaternion.LookRotation(input);
  // Drehe dich da mit turnSpeed hin
  transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, turnSpeed * Time.deltaTime);
  
  // Bewege dich in deine Blickrichtung vorwärts
  transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}

 

Share this post


Link to post
Share on other sites

Hi,

was du beachten musst: du bewegst nun dein Schiff. Auch wenn dein Schiff dein sichtbares Spielfeld verlässt, bewegt es sich noch immer weiter.

Grundsätzlich: 2D oder 3D? Bei 2D startest du eine Drehanimation, bei 3D musst du das Schiff wirklich drehen. Dann muss für den Richtungswechsel ersteinmal eine Abfrage kommen, ob die Drehung schon beendet wurde oder nicht. Ansonsten kann es hier zu Komplikationen kommen. Edit: hatte @Sascha ja schon genannt und bearbeitet.

Wie soll die Drehung aussehen: wie bei C64 Klassiker Uridium? Da ist es (wenn ich es richtig in Erinnerung habe) so, dass auch erst die Drehung beendet werden muss, bevor das Schiff wieder gedreht werden kann um in die andere Richtung gedreht werden zu können.

Ich mache einen Top Down Shooter. Hier das Thema, welches ich damals erstellt habe:

https://forum.unity-community.de/topic/13545-c-player-controlller-für-space-ship-maus-ruckelt/

Und das Thema, für die Touch-Steuerung (wirst du sicher auch noch machen wollen):

https://forum.unity-community.de/topic/13806-player-controller-für-space-ship-touch-steuerung-gelöst/?tab=comments#comment-100574

Ich habe die in den Themen eingestellte Scripte später noch etwas verfeinert, aber eventuell helfen dir die hier genannten Scripte trotzdem.

Bei mir dreht sich das Raumschiff auch etwas. Diese Drehung habe ich als eigenes Script an mein Model gehängt, welches als Child unter meinem Haupt Game Objekt liegt. Dem Haupt Game Objekt (nennt man dass so?) habe ich das Steuerungs Script gegeben.
Ich bewege konstant den Hintergrund. Die Bewegung des Schiff passiert nur im Sichtbereich der Camera (welche sich mit einem eigenen Script etwas nach links und rechts bewegt). Bei dir scheint der Hintergrund statisch zu sein. Dann musst du deine Camera auch mit bewegen. Hierzu gibt es auf Youtube gute Videos von Michael Mark. Er bewgt zwar 2D einen Roboter, aber ich denke mir, das du hier viele Anregungen bekommen kannst.

Edited by KaBau

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×