void FixedUpdate() { if (body.Distance(playerCollider).distance > 10) { Destroy(this.gameObject); } }
virtual public bool IsConnectedToOther() { // check if close to other player and they are on a pointer CircleCollider2D otherCollider = otherPlayer.GetComponent <CircleCollider2D>(); ColliderDistance2D distance = rigidbody.Distance(otherCollider); return(distance.distance < otherCollider.radius); }
private bool IsGrounded() { // Would normally use this, however the rotations around objects make "touching" // difficult to trigger. Instead we use a proximity based approach. // return rigidbody2D.IsTouchingLayers(WhatIsGround); return(GameObject.FindGameObjectsWithTag(GroundTag) .Where(w => rigidbody2D.Distance(w.GetComponent <Collider2D>()).distance <= GroundProximity) .Any()); }
void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.GetComponent <BlockController>()) { if (rb.Distance(other.collider).isOverlapped) { overlapOtherbox = true; } } }
private void FixedUpdate() { Vector2 offset = KinematicMath2D.Integrate(ref State, ref Config, Time.deltaTime); RaycastHit2D closestHit; if (Body.IsCastOverlapping(SolidMask, offset, out closestHit)) { float distance = closestHit.distance; Debug.LogFormat("colliding with floor {0} {1}", closestHit.normal, closestHit.distance); offset.Normalize(); offset.x *= distance; offset.y *= distance; State.Velocity = Vector2.Reflect(State.Velocity, closestHit.normal) * BounceFactor; } Body.position += offset; Collider2D penetrating; int ticks = 16; while (Body.IsOverlapping(SolidMask, out penetrating) && ticks-- > 0) { var distance = Body.Distance(penetrating); if (distance.distance < 0) { Vector2 vec = distance.normal; float dist = distance.distance; Body.position += new Vector2(vec.x * dist, vec.y * dist); Debug.LogFormat("Repositioning on {0} by {1}", vec, dist); } else { break; } } transform.position = Body.position; if (Body.IsOverlapping(SolidMask, new Vector2(0, -FloorDistance))) { State.GravityMultiplier = 0; if (State.Velocity.y < 0.05f) { State.Velocity.y = 0; } } else { State.GravityMultiplier = 1; } }
void Update() { //colliderDistance2D=Physics2D.Distance (colliderA: firstCollider, colliderB: secondCollider); //colliderDistance2D = firstCollider.Distance(collider: secondCollider); colliderDistance2D = myRigidbody2D.Distance(collider: secondCollider); normal = GizmosForVector.Round(colliderDistance2D.normal, 2); isValid = colliderDistance2D.isValid; isOverlaped = colliderDistance2D.isOverlapped; pointA = GizmosForVector.Round(colliderDistance2D.pointA, 2); pointB = GizmosForVector.Round(colliderDistance2D.pointB, 2); }
public void FixedUpdate() { var myRigidBody = GetComponent <Rigidbody2D>(); var myCircleCollider = GetComponent <CircleCollider2D>(); var myRadius = myCircleCollider.radius; var rigidBodies = GameObject.FindObjectsOfType <Rigidbody2D>(); var gravity = Vector2.zero; Rigidbody2D closestRigidBody = null; foreach (var body in rigidBodies) { if (body.gameObject != gameObject && (closestRigidBody == null || body.Distance(myCircleCollider).distance < closestRigidBody.Distance(myCircleCollider).distance)) { closestRigidBody = body; } } if (closestRigidBody != null) { Vector2 diff = closestRigidBody.worldCenterOfMass - myRigidBody.worldCenterOfMass; float distanceCenterOfMass = diff.magnitude; var bodyRadius = 10.0f; float distance = closestRigidBody.Distance(myCircleCollider).distance; var force = Mathf.Pow(bodyRadius / (bodyRadius + distance), 2); gravity += diff.normalized * force * myRigidBody.gravityScale; } closestPlanet = closestRigidBody == null ? null : closestRigidBody.gameObject; myRigidBody.AddForceAtPosition(gravity, myRigidBody.worldCenterOfMass, ForceMode2D.Impulse); if (collisions.Count == 0) { inAirTime += Time.fixedDeltaTime; } else { inAirTime = Mathf.Max(0.0f, Mathf.Min(inAirTime, 3.0f) - Time.fixedDeltaTime * 10.0f); } //myRigidBody.AddForceAtPosition(myRigidBody.velocity * -0.01f, myRigidBody.worldCenterOfMass, ForceMode2D.Impulse); }
void CreatBullet() { if (Physics2D.Raycast(bulletPosition, toPlayerVector2, m_rigidbody2D.Distance(playerCollider).distance, platformLayerMask)) { return; } float _degrees = Vector2.Angle(toPlayerVector2, toPlayerVector2.x > 0 ? Vector2.right : Vector2.left); Quaternion _dir = Quaternion.Euler(0, transform.rotation.eulerAngles.y, _degrees); var bullet = Instantiate(BulletPrefab, (Vector3)bulletPosition, _dir).GetComponent <Rigidbody2D>(); var hitCheck = bullet.gameObject.GetComponent <HitCheck>(); hitCheck.damage = damage_Bullet; hitCheck.targetTag.Add("Player"); hitCheck.targetTag.Add("Platform"); Vector2 bulletVelocity = toPlayerVector2.normalized * bulletSpeed; bullet.velocity = bulletVelocity; Destroy(bullet.gameObject, 10f); preShootTime = Time.time; }
void FindPlayer() { float _playerDistance = (playerCollider.transform.position - transform.position).magnitude; bulletPosition = m_BulletPosition.position; if (findPlayer && _playerDistance <= spiderInfo.findRadius * 2) { findPlayer = true; } else if (_playerDistance <= spiderInfo.findRadius && !Physics2D.Raycast(bulletPosition, toPlayerVector2, m_rigidbody2D.Distance(playerCollider).distance, platformLayerMask)) { findPlayer = true; } else { findPlayer = false; } //Debug.DrawRay(bulletPosition, toPlayerVector2 * m_rigidbody2D.Distance(playerCollider).distance); if (stop) { findPlayer = false; } if (!findPlayer) { m_Animator.SetBool("Walk", false); } }
/// <summary> /// Returns if two objects are touching now. /// </summary> static public bool IsTouchingNow(this Rigidbody2D inRigidbody, Collider2D inCheck) { return(inRigidbody.Distance(inCheck).distance <= 0); }
/// <summary> /// Returns if two objects are overlapping . /// </summary> static public bool IsOverlapping(this Rigidbody2D inRigidbody, Collider2D inCheck) { return(inRigidbody.Distance(inCheck).isOverlapped); }