private void FixedUpdate() { if (myCollider.enabled) { Vector2 movementThisStep = (Vector2)transform.position - previousPosition; float movementSqrMagnitude = movementThisStep.sqrMagnitude; if (movementSqrMagnitude > sqrMinimumExtent) { float movementMagnitude = Mathf.Sqrt(movementSqrMagnitude); RaycastHit2D hitInfo = Physics2D.Raycast(previousPosition, movementThisStep, movementMagnitude, hitLayers.value); if (hitInfo && hitInfo.collider != myCollider) { transform.position = hitInfo.point; if (((int)triggerTarget & (int)TriggerTarget.Other) != 0 && hitInfo.collider.isTrigger) { GameObject otherObject = hitInfo.collider.gameObject; TriggerHitDetectionView otherTriggerHitDetectionView = otherObject.GetComponent <TriggerHitDetectionView>(); if (otherTriggerHitDetectionView != null) { otherTriggerHitDetectionView.OnTriggerEnter2D(myCollider); } } if (((int)triggerTarget & (int)TriggerTarget.Self) != 0) { triggerHitDetectionView.OnTriggerEnter2D(hitInfo.collider); } } } previousPosition = transform.position; } }
private void Awake() { myRigidbody = GetComponent <Rigidbody2D>(); myCollider = GetComponents <Collider2D>().FirstOrDefault(); if (myCollider == null || myRigidbody == null) { Debug.LogError(name + " is missing Collider2D or Rigidbody2D component", this); enabled = false; return; } triggerHitDetectionView = GetComponent <TriggerHitDetectionView>(); if (triggerHitDetectionView == null) { Debug.LogError(name + " is missing triggerHitDetectionView component", this); } previousPosition = myRigidbody.transform.position; minimumExtent = Mathf.Min(myCollider.bounds.extents.x, myCollider.bounds.extents.y); sqrMinimumExtent = minimumExtent * minimumExtent; }