Jump to content
Unity Insider Forum

Rigidbody2D steckt in Ecke fest


MustafGames

Recommended Posts

Hallo, 

wenn ich mit meinem Rigidbody2D die Figur in eine Ecke des Spiels bewege, bleibt die Figur dort stecken.

Die Figur hat einen BoxCollider2D und die Tilemap den TilemapCollider2D beiden sind auf Z Achse 0.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour {

    Rigidbody2D rb;
    Animator ani;
    BoxCollider2D col;

    public float curSpeed;
    public float maxSpeed = 2.0f;

    public Vector2 curDir;

    public float curVel;
    public float smooth = 0.4f;

    void Awake () {
        this.gameObject.AddComponent<BoxCollider2D>();
        col = GetComponent<BoxCollider2D>();
        col.offset = new Vector2(0, -0.065f);
        col.size = new Vector2(0.125f, 0.125f);


        this.gameObject.AddComponent<Rigidbody2D>();
        rb = GetComponent<Rigidbody2D>();
        rb.gravityScale = 0;
        rb.constraints = RigidbodyConstraints2D.FreezeRotation;

        ani = GetComponent<Animator>();
    }

    void Update () {
        ani.SetFloat("X", Input.GetAxisRaw("Horizontal"));
        ani.SetFloat("Y", Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate () {
        if (Input.GetAxisRaw("Horizontal") != 0 || Input.GetAxisRaw("Vertical") != 0) {
            curDir = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
            curSpeed = Mathf.SmoothDamp(curSpeed, maxSpeed, ref curVel, smooth);
            curDir.Normalize();
            rb.MovePosition(rb.position + (curDir * curSpeed) * Time.fixedDeltaTime);
        } else {
            curDir = Vector2.zero;
            curVel = 0;
            curSpeed = 0;
        }
    }
}

 

MfG Mustaf

Screenshot (74).png

Screenshot (73).png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Projekt ist frisch und Physics Materials benutze ich keine.

Collider Option Grid nutze ich für die Tiles.

 

Edit:  Als Sort Mode für die Tilemap benutze ich Chunk, nur manchmal sortiert das ziemlich schlecht. Bei Individual muss ich ja die Transparency Sort Order ändern auf Custom, hast du für meine Variante (Draufsicht) da ein paar Tipps?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Falls Sie an meinem Code eine Verbesserung finden, würde ich mich freuen, die Figur soll ja langsam immer schneller laufen bis zu einem gewissen Punkt solange Sie sich bewegt.

 

Für alle die eine Lösung suchen wenn Sie einen Box Collider 2D benutzen als Character Collider und eine Tilemap nutzen.

Ändert folgendes:

Used by Composite im TilemapCollider2D aktivieren
Rigidbody2D mit static aktiviert zur Tilemap hinzufügen

CompositeCollider2D hinzufügen zur Tilemap.

(Sollte das nicht klappen dann ein PhysicsMaterial2D hinzufügen und an den Einstellungen im Material basteln).

 

Thema kann als gelöst markiert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...