Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- [RequireComponent(typeof(CapsuleCollider))]
- public class CapsuleCastCheck : MonoBehaviour
- {
- private CapsuleCollider capsule = null;
- [SerializeField]
- private float checkAngle = 0f;
- [SerializeField]
- private float checkDist = 1f;
- private void OnDrawGizmosSelected()
- {
- if (capsule == null)
- capsule = GetComponent<CapsuleCollider>();
- // incorrect
- //Vector3 pointOffset = Vector3.up * (capsule.height / 2f);
- // correct
- Vector3 pointOffset = Vector3.up * (capsule.height / 2f - capsule.radius);
- Vector3 point1 = transform.TransformPoint(pointOffset);
- Vector3 point2 = transform.TransformPoint(-pointOffset);
- Vector3 checkDir = Quaternion.AngleAxis(checkAngle, transform.up) * transform.forward;
- bool hit = Physics.CapsuleCast(point1, point2, capsule.radius, checkDir, checkDist);
- Gizmos.color = Color.gray;
- Gizmos.DrawWireSphere(transform.TransformPoint(pointOffset), capsule.radius);
- Gizmos.DrawWireSphere(transform.TransformPoint(-pointOffset), capsule.radius);
- Gizmos.color = hit ? Color.green : Color.red;
- Gizmos.DrawWireSphere(transform.TransformPoint(pointOffset) + checkDir, capsule.radius);
- Gizmos.DrawWireSphere(transform.TransformPoint(-pointOffset) + checkDir, capsule.radius);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement