Jump to content
Unity Insider Forum

Splashy

Members
  • Posts

    7
  • Joined

  • Last visited

Splashy's Achievements

Newbie

Newbie (1/3)

0

Reputation

  1. Hallo malzbie Vielen Dank für deine Zeit! Wenn ich Dich richtig verstehe, würdest Du anstelle von BlendTrees also einzelne Animationen steuern? Ich habe inzwischen einen Weg gefunden ohne grosse Anpassung des Codes und die BlendTrees kann ich so auch beibehalten (es sollen ja noch weitere folgen): Ich habe bei der Down-Animation im BlendTree eine Animation DownLeft und DownRight eingebaut (jeweils auf 0.5 bzw. -0.5). Funktioniert wunderbar! 😇 Ich hoffe, dass das mal jemanden andrem nutzt. Hab Stunden verbraten deswegen!!! @malzbie: Vielen Dank nochmals für deine Input! @Sascha: Auch Dir nochmals vielen Dank! Und gerne werde ich im Assets-Store mal schauen ob da was spannendes drin ist! THX!!!
  2. Hallo Sascha Das merke ich mir! Danke! Aber leider haben wir uns offensichtlich falsch verstanden: Der Spieler soll sich ja auf einem "Grid" (1 Einheit in Unity) jeweils bewegen und auch stehenbleiben ausser, der Spieler hält die jeweiligen Taste gedrückt. Deine Lösung bewegt den Spieler ohne "Grid", was nett ist, aber nicht meine Vorstellung. Im Video sieht man, dass das vorher möglich war. Ich habe den aktuellen Stand nochmals in den Anhang gestellt: Einziges Problem das ich habe ist: Könntest Du mir bitte genau hier weiterhelfen? THX! pingu3.unitypackage
  3. Hallo Sascha Ich habe gerade bemerkt, dass deine Lösung doch noch einen Hacken hat, da der Spieler noch weitere Animationen ausführt: Wenn er einen IceCube mit "Space" zerstört, dann wird jedes Mal die Front-Animation mit dem Hammer gespielt anstelle der jeweilig richtigen (right, left, up and down). Wenn Du mir deine Lösung des Movements zeigen könntest, wäre das super! Evtl. löst das ja meine Probleme?! Ich habe einige Beispiele aus dem Internet ausprobiert, jedoch hatten alle, bis auf meine Lösung, das Problem, dass der Spieler ganz kurz (ca. 1 Frame) "gestoppt" hat auf dem Grid. Daher habe ich das mit dem PlayerMovePoint gewählt. Ich habe die neueste Version des Spiels hinterlegt und hoffe, dass Du mir helfen kannst... Vielen Dank! 😀 Pingu2.unitypackage
  4. Hallo Sascha! Das funktioniert ja super mit deiner Korrektur! Vielen Dank!! Wie gesagt, ich bin ein blutiger Anfänger, daher habe ich halt einfach ein Youtube Video genommen und die Bewegung auf dem Grid nachgebaut. Aber ein würde mich schon noch interessieren: Darf ich Dich fragen, wie Du das gelöst hättest? Dann kann ich noch was dazulernen... Gerne würde ich gerne mich revangieren für deine Hilfe: Hast Du Patreon? THX!
  5. Hallo! Ich bin ein blutiger Anfänger und kämpfe gerade mit meinem Pinguin-Spieler der nicht genau das macht, was ich will 😉 Wenn die Taste "W" und dann die Taste "A" oder "D" gedrückt wird, bewegt sich der Spieler nach oben und dann nach rechts beziehungsweise nach links. Der Spieler "schaut" dann auch korrekterweise nach rechts oder links. 😀 Wenn JEDOCH die Taste "S" und dann die Taste "A" oder "D" gedrückt wird, bewegt sich der Spieler nach unten und dann nach rechts beziehungsweise nach links. ABER dabei "schaut" der Spieler nicht nach recht oder links!!! 🥵 Warum? Die beiden Blend-Trees (für Idle und walking) sind korrekt denke ich... Was mache ich falsch? Im Anhang findet Ihr ein Video der "falschen" Bewegung, das Movement-Script und das komplette Unity-Projekt als Export. Vielen Dank im Voraus! Pinug_Bug.mp4 PlayerMovement.cs Pinug.unitypackage
  6. Hallo Cxyda Vielen Dank für einen Input. ich werde mir das anschauen. Und ja, es gibt einen Finderlohn: Du kriegst das Spiel wenn es fertig ist! 😉 Danke Dir!
  7. Hallo zusammen Ich bin ein C# und Unity Anfänger, der sich in einem 2D Top down Game versucht. Das Spiel funktioniert schon recht gut jedoch finde ich den einen Bug nicht!!! Das Problem ist, dass der Spieler sich nicht bewegt oder die Eisblöcke nur noch langsam geschoben werden, wenn es immer weniger Eisblöcke auf dem Spielfeld gibt. Meisten passiert das, wenn es nur noch 5,4 oder 3 Blöcke hat. Siehe Video. Manchmal bugt jedoch auch der Spieler bei einem Eisblock. Der Unit - Setup ist auf Bild B zu sehen. Die beiden Scripts sind ebenfalls weiter unten dokumentiert. Würde mich sehr freuen, wenn mir hierbei jemand helfen könnte. Vielen Dank im Voraus! Video A - find the bug.mp4 using System.Collections; using UnityEngine; class PlayerMovement : MonoBehaviour { private Vector2 targetPosition; private float speed = 5f; private bool MoveAllowed; private Vector2 change; private Animator animator; private Vector2 IceCubePosition; private GameObject PushWallObject; private Vector2 NewDirection; // PUBLIC VARIABLES public bool MoveCube; public GameObject IceCubeObject; public Vector2 PushWallObjectPosition; private void Awake() { // Set this so we don't wander off at the start targetPosition = new Vector2Int(Mathf.RoundToInt(transform.position.x), Mathf.RoundToInt(transform.position.y)); transform.position = (Vector2)targetPosition; MoveAllowed = true; //MoveCube = false; } private void Start() { animator = GetComponent<Animator>(); //Debug.Log("Dir: " + NewDirection); } public void Update() { // Animation START change = Vector2.zero; change.x = Input.GetAxisRaw("Horizontal"); change.y = Input.GetAxisRaw("Vertical"); if (change != Vector2.zero) { animator.SetFloat("moveX", change.x); animator.SetFloat("moveY", change.y); } // Animation END if ((Vector2)transform.position != targetPosition) { MoveTowardsTargetPosition(); // Animation START animator.SetFloat("AnimSpeed", change.sqrMagnitude); // Animation END } else { SetNewTargetPositionFromInput(); } } private void MoveTowardsTargetPosition() { transform.position = Vector2.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime); } // INPUTSYSTEM private void SetNewTargetPositionFromInput() { if (Input.GetKey(KeyCode.W)) { NewDirection = new Vector2(0, 1); PushAndDestroy(NewDirection); } else if (Input.GetKey(KeyCode.S)) { NewDirection = new Vector2(0, -1); PushAndDestroy(NewDirection); } else if (Input.GetKey(KeyCode.A)) { NewDirection = new Vector2(-1, 0); PushAndDestroy(NewDirection); } else if (Input.GetKey(KeyCode.D)) { NewDirection = new Vector2(1, 0); PushAndDestroy(NewDirection); } MoveAllowed = true; } private void PushAndDestroy(Vector2 NewDirection) { //MoveCube = false; // not worksing RaycastHit2D[] hitsOne = Physics2D.RaycastAll(transform.position, NewDirection, 1f); //1 Block analysieren if (hitsOne.Length == 1) { MoveCube = false; //good working RaycastHit2D[] hitsPush = Physics2D.RaycastAll(transform.position, NewDirection, 20f); //20 Blöcke analysieren //Debug.Log(hitsTwo.Length); Debug.Log("Wieviele Objekte sind denn da: " + hitsPush.Length); IceCubeObject = hitsPush[0].collider.gameObject; IceCubePosition = hitsPush[0].point; PushWallObject = hitsPush[1].collider.gameObject; PushWallObjectPosition = hitsPush[1].point - (NewDirection/2); RaycastHit2D[] FrontRay = Physics2D.RaycastAll(transform.position, NewDirection, 2f); //2 Block analysieren if (FrontRay.Length == 1 && hitsPush[0].collider.CompareTag("IceCube") && Input.GetKey(KeyCode.Space)) { //Push Funktion aufrufen im Objekt IceCube MoveCube = true; } // Wenn 2 Blöcke erkannt werden und der erste Block ein IceCube ist, dann zerstöre den IceCube RaycastHit2D[] DestroyRay = Physics2D.RaycastAll(transform.position, NewDirection, 2f); //2 Block analysieren if (DestroyRay.Length == 2 && hitsPush[0].collider.CompareTag("IceCube") && Input.GetKey(KeyCode.Space)) { Destroy(hitsPush[0].transform.gameObject); } } else if (MoveAllowed == true) { targetPosition += NewDirection; } } } using System.Collections; using System.Collections.Generic; using UnityEngine; public class PushIceCube : MonoBehaviour { PlayerMovement PlayerMovementScript; private readonly float PushSpeed = 1.5f; private Vector2 PushWallObjectPosition; private bool MoveCube; private GameObject IceCubeObject; // Start is called before the first frame update void Start() { PlayerMovementScript = GameObject.Find("Player").GetComponent<PlayerMovement>(); } // Update is called once per frame void Update() { MoveCube = PlayerMovementScript.MoveCube; IceCubeObject = PlayerMovementScript.IceCubeObject; PushWallObjectPosition = PlayerMovementScript.PushWallObjectPosition; if (MoveCube == true) { IceCubeObject.transform.position = Vector2.MoveTowards(IceCubeObject.transform.position, PushWallObjectPosition, PushSpeed * Time.deltaTime); } } } Video A - find the bug.mp4
×
×
  • Create New...