Last active
October 1, 2025 21:24
-
-
Save InfiniteAmmoInc/039e5c28a876286c103d369f9ab61a0c to your computer and use it in GitHub Desktop.
Revisions
-
InfiniteAmmoInc revised this gist
Aug 6, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -91,7 +91,7 @@ private bool TrySlide(Vector3 direction, float distance, ref Vector3 newDirectio return false; } private bool BoxCastHit(Vector3 pos, Vector3 direction, float distance, out float castDistance) { RaycastHit raycastHit; if (Physics.BoxCast(pos + boxOffset, boxScale * .5f, direction, out raycastHit, Quaternion.identity, distance, -
InfiniteAmmoInc revised this gist
Aug 6, 2018 . 1 changed file with 33 additions and 17 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,10 +4,10 @@ public class BoxMover : MonoBehaviour { public enum Slide { None, Perpendicular, } public Vector3 boxScale, boxOffset; @@ -20,25 +20,25 @@ void Awake() layerMask = LayerMask.GetMask("Default"); } public bool Move(Vector3 move, Slide slide = Slide.None) { var distance = move.magnitude; var direction = move / distance; var pos = transform.position; float castDistance; if (BoxCastHit(pos, direction, distance, out castDistance)) { var bailPos = pos + (castDistance - shim) * direction; if (slide == Slide.None) { transform.position = bailPos; return false; } var newDirection = Vector3.zero; if (!TrySlide(direction, distance, ref newDirection)) { transform.position = bailPos; return false; } @@ -51,14 +51,14 @@ public bool Move(Vector3 move, SlideType slideType = SlideType.None) return true; } public bool MoveX(float xAmount, Slide slide = Slide.None) { return Move(Vector3.right * xAmount, slide); } public bool MoveY(float yAmount, Slide slide = Slide.None) { return Move(Vector3.up * yAmount, slide); } private bool TrySlide(Vector3 direction, float distance, ref Vector3 newDirection) @@ -68,28 +68,44 @@ private bool TrySlide(Vector3 direction, float distance, ref Vector3 newDirectio maxAdjust = .5f; const float adjustStep = .1f; var pos = transform.position; float castDistance; for (var adjust = adjustStep; adjust < maxAdjust; adjust += adjustStep) { if (direction == Vector3.right || direction == Vector3.left) { newDirection = (direction + Vector3.up * adjust).normalized; if (!BoxCastHit(pos, newDirection, distance, out castDistance)) return true; } else if (direction == Vector3.down) { newDirection = (direction + Vector3.right * adjust).normalized; if (!BoxCastHit(pos, newDirection, distance, out castDistance)) return true; newDirection = (direction + Vector3.left * adjust).normalized; if (!BoxCastHit(pos, newDirection, distance, out castDistance)) return true; } } return false; } bool BoxCastHit(Vector3 pos, Vector3 direction, float distance, out float castDistance) { RaycastHit raycastHit; if (Physics.BoxCast(pos + boxOffset, boxScale * .5f, direction, out raycastHit, Quaternion.identity, distance, layerMask)) { castDistance = raycastHit.distance; return true; } castDistance = distance; return false; } void OnDrawGizmosSelected() { Gizmos.matrix = transform.localToWorldMatrix; -
InfiniteAmmoInc revised this gist
Aug 6, 2018 . No changes.There are no files selected for viewing
-
InfiniteAmmoInc renamed this gist
Aug 6, 2018 . 1 changed file with 15 additions and 12 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; public class BoxMover : MonoBehaviour { public enum SlideType { @@ -13,14 +13,21 @@ public enum SlideType public Vector3 boxScale, boxOffset; private const float shim = .01f; private bool overlapping; private int layerMask; void Awake() { layerMask = LayerMask.GetMask("Default"); } public bool Move(Vector3 move, SlideType slideType = SlideType.None) { var distance = move.magnitude; var direction = move / distance; var pos = transform.position; RaycastHit raycastHit; if (Physics.BoxCast(pos + boxOffset, boxScale * .5f, direction, out raycastHit, Quaternion.identity, distance, layerMask)) { if (slideType == SlideType.None) { @@ -29,7 +36,7 @@ public bool Move(Vector3 move, SlideType slideType = SlideType.None) } var newDirection = Vector3.zero; if (!TrySlide(direction, distance, ref newDirection)) { transform.position = pos + (raycastHit.distance - shim) * direction; return false; @@ -54,42 +61,38 @@ public bool MoveY(float yAmount) return Move(Vector3.up * yAmount); } private bool TrySlide(Vector3 direction, float distance, ref Vector3 newDirection) { var maxAdjust = 1.5f; if (direction == Vector3.down) maxAdjust = .5f; const float adjustStep = .1f; var pos = transform.position; for (var adjust = adjustStep; adjust < maxAdjust; adjust += adjustStep) { if (direction == Vector3.right || direction == Vector3.left) { newDirection = (direction + Vector3.up * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, Quaternion.identity, distance, layerMask)) return true; } else if (direction == Vector3.down) { newDirection = (direction + Vector3.right * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, Quaternion.identity, distance, layerMask)) return true; newDirection = (direction + Vector3.left * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, Quaternion.identity, distance, layerMask)) return true; } } return false; } void OnDrawGizmosSelected() { Gizmos.matrix = transform.localToWorldMatrix; Gizmos.DrawWireCube(boxOffset, boxScale); } } -
InfiniteAmmoInc revised this gist
Aug 6, 2018 . 1 changed file with 4 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -61,24 +61,24 @@ private bool TrySlide(Vector3 direction, float distance, int layerMask, ref Vect maxAdjust = .5f; const float adjustStep = .1f; RaycastHit raycastHit; var pos = transform.position; for (var adjust = adjustStep; adjust < maxAdjust; adjust += adjustStep) { if (direction == Vector3.right || direction == Vector3.left) { newDirection = (direction + Vector3.up * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, out raycastHit, Quaternion.identity, distance, layerMask)) return true; } else if (direction == Vector3.down) { newDirection = (direction + Vector3.right * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, out raycastHit, Quaternion.identity, distance, layerMask)) return true; newDirection = (direction + Vector3.left * adjust).normalized; if (!Physics.BoxCast(pos + boxOffset, boxScale * .5f, newDirection, out raycastHit, Quaternion.identity, distance, layerMask)) return true; } } -
InfiniteAmmoInc created this gist
Aug 6, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,95 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Entity : MonoBehaviour { public enum SlideType { None, Vertical, } public Vector3 boxScale, boxOffset; private const float shim = .01f; private bool overlapping; public bool Move(Vector3 move, SlideType slideType = SlideType.None) { var distance = move.magnitude; var direction = move / distance; var pos = transform.position; if (Physics.BoxCast(pos + boxOffset, boxScale * .5f, direction, out var raycastHit, Quaternion.identity, distance, LayerMask.GetMask("Default"))) { if (slideType == SlideType.None) { transform.position = pos + (raycastHit.distance - shim) * direction; return false; } var newDirection = Vector3.zero; if (!TrySlide(direction, distance, LayerMask.GetMask("Default"), ref newDirection)) { transform.position = pos + (raycastHit.distance - shim) * direction; return false; } transform.position = pos + newDirection * distance; return true; } pos += move; transform.position = pos; return true; } public bool MoveX(float xAmount, SlideType slideType = SlideType.None) { return Move(Vector3.right * xAmount, slideType); } public bool MoveY(float yAmount) { return Move(Vector3.up * yAmount); } private bool TrySlide(Vector3 direction, float distance, int layerMask, ref Vector3 newDirection) { var maxAdjust = 1.5f; if (direction == Vector3.down) maxAdjust = .5f; const float adjustStep = .1f; RaycastHit raycastHit; for (var adjust = adjustStep; adjust < maxAdjust; adjust += adjustStep) { if (direction == Vector3.right || direction == Vector3.left) { newDirection = (direction + Vector3.up * adjust).normalized; if (!Physics.BoxCast(transform.TransformPoint(boxOffset), boxScale * .5f, newDirection, out raycastHit, transform.rotation, distance, layerMask)) return true; } else if (direction == Vector3.down) { newDirection = (direction + Vector3.right * adjust).normalized; if (!Physics.BoxCast(transform.TransformPoint(boxOffset), boxScale * .5f, newDirection, out raycastHit, transform.rotation, distance, layerMask)) return true; newDirection = (direction + Vector3.left * adjust).normalized; newDirection = newDirection.normalized; if (!Physics.BoxCast(transform.TransformPoint(boxOffset), boxScale * .5f, newDirection, out raycastHit, transform.rotation, distance, layerMask)) return true; } } return false; } void OnDrawGizmosSelected() { Gizmos.matrix = transform.localToWorldMatrix; Gizmos.DrawWireCube(boxOffset, boxScale); } }