public static float Distance_To_Collider(Ray ray, Collider collider, float distance) { Vector3 target = collider.transform.position; float distance_to_line = Linear_Algebra.Distance_To_Line(ray, target); if (distance_to_line < 0.0f) { return(float.MaxValue); } float hypotneuse = Vector3.Distance(ray.origin, target); Vector3 closest = ray.origin + ray.direction * Mathf.Sqrt(hypotneuse * hypotneuse + distance_to_line * distance_to_line); RaycastHit hit; Vector3 direction = (target - closest).normalized; direction.Normalize(); if (!direction.Equals(Vector3.zero) && collider.Raycast(new Ray(closest, direction), out hit, distance_to_line)) { return(hit.distance); } return(float.MaxValue); }
//beaver beer //c**t cocktails //g-spot spirits //womb wiskey //vaginal vodka //crotch scotch //slit sake //cervix cider //fanny fruitwine //hymen //labia lager //ovarian absinthe //placenta //snatch //uterus tequila void Update() { if (this.isActive && base.isReady) { Ray ray = new Ray(this.transform.position, this.transform.forward); RaycastHit hit; //raycast first if (Physics.Raycast(ray, out hit, this.myRange, Bitwise.Off(1, 8))) { this.myTarget = hit.collider; } else { this.myTarget = null; float closest = float.MaxValue; foreach (var collider in UnityEngine.Object.FindObjectsOfType <Collider>()) { if (Logic <int> .Neither(collider.gameObject.layer, 1, 8)) { float distance = Linear_Algebra.Distance_To_Collider(ray, collider, closest); if (distance < closest) { closest = distance; this.myTarget = collider; } } } } } }