Quantcast
Channel: Questions in topic: "addforce"
Viewing all articles
Browse latest Browse all 1264

Help with 2D topdown knockback

$
0
0
Hello! i am having a problem with my 2D topdown game, i want to make a slime knockback the player, and i can´t do it work like i want to, i want it to knockfrom right to the left, up to down ETC. but it only knocks from right to left and left to right, i have tried many things i will add the playermovement and the hurtplayer script, also the AI script. AI: using UnityEngine; using System.Collections; public class AI : MonoBehaviour { private bool attacking; public float attackTime; private float attackTimeCounter; private Vector3 Player; private Vector2 Playerdirection; private float Xdif; private float Ydif; private float speed; private int Wall; private float distance; private float distanceFromPlayer; Rigidbody2D rb; public float Range = 5; public float Speed; Animator anim; // Use this for initialization void Start () { rb = GetComponent (); Wall = 1 << 8; speed = Speed; anim = GetComponent (); } // Update is called once per frame void Update () { distance = Vector2.Distance (Player, transform.position); Player = GameObject.Find ("Player").transform.position; if (distance < Range) { Xdif = Player.x - transform.position.x; Ydif = Player.y - transform.position.y; Playerdirection = new Vector2 (Xdif, Ydif); if (!Physics2D.Raycast (transform.position, Playerdirection, 5, Wall)) { rb.AddForce (Playerdirection.normalized * speed); } } } } player movement using UnityEngine; using System.Collections; public class PlayerMovement : MonoBehaviour { Rigidbody2D rbody; Animator anim; private bool attacking; public float attackTime; private float attackTimeCounter; public float knockBack; public float knockBackCount; public float knockBackLength; public bool knockFromRight; public bool knockFromUp; public bool knockFromLeft; public bool knockFromDown; // Use this for initialization void Start () { rbody = GetComponent (); anim = GetComponent (); } // Update is called once per frame void Update () { if (knockBackCount <= 0) { Vector2 movement_vector = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical")); if (movement_vector != Vector2.zero) { anim.SetBool ("iswalking", true); anim.SetFloat ("input_x", movement_vector.x); anim.SetFloat ("input_y", movement_vector.y); } else { anim.SetBool ("iswalking", false); } rbody.MovePosition (rbody.position + movement_vector * Time.deltaTime); { if (Input.GetKeyDown (KeyCode.J)) { attackTimeCounter = attackTime; attacking = true; anim.SetBool ("isattacking", true); } if (attackTimeCounter > 0) { attackTimeCounter -= Time.deltaTime; } if (attackTimeCounter <= 0) { attacking = false; anim.SetBool ("isattacking", false); } } } else { if (knockFromRight) rbody.velocity = new Vector2 (-knockBack, 0f); else knockFromRight = false; if (knockFromLeft) rbody.velocity = new Vector2 (knockBack, 0f); else knockFromLeft = false; if (knockFromUp) rbody.velocity = new Vector2 (0f, -knockBack); else knockFromUp = false; if (knockFromDown) rbody.velocity = new Vector2 (0f, knockBack); else knockFromDown = false; knockBackCount -= Time.deltaTime; } if (knockBackCount <= 0) { knockFromRight = false; knockFromLeft = false; knockFromUp = false; knockFromDown = false; knockBackCount = 0; } } } hurtplayer using UnityEngine; using System.Collections; public class HurtPlayer : MonoBehaviour { public int damageToGive; public GameObject damageNumber; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnCollisionEnter2D (Collision2D other) { if (other.gameObject.name == "Player") { other.gameObject.GetComponent ().HurtPlayer (damageToGive); var clone = (GameObject)Instantiate (damageNumber, other.transform.position, Quaternion.Euler (Vector3.zero)); clone.GetComponent ().damageNumber = damageToGive; } } void OnTriggerEnter2D(Collider2D other) { var player = other.GetComponent (); player.knockBackCount = player.knockBackLength; if (other.gameObject.name == "Player") { if (other.transform.position.x < transform.position.x) player.knockFromRight = true; if (other.transform.position.x > transform.position.x) player.knockFromLeft = true; if (other.transform.position.y < transform.position.y) player.knockFromUp = true; if (other.transform.position.y > transform.position.y) player.knockFromDown = true; } if (player.knockFromRight == true) { player.knockFromDown = false; player.knockFromUp = false; player.knockFromLeft = false; } if (player.knockFromLeft == true) { player.knockFromDown = false; player.knockFromUp = false; player.knockFromRight = false; } if (player.knockFromUp == true) { player.knockFromDown = false; player.knockFromRight = false; player.knockFromLeft = false; } if (player.knockFromDown == true) { player.knockFromRight = false; player.knockFromUp = false; player.knockFromLeft = false; } } }

Viewing all articles
Browse latest Browse all 1264

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>