You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB
C#

5 years ago
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// MoveController controls movement for 2D characters
[RequireComponent(typeof(BoxCollider2D))]
5 years ago
public class MoveController : MonoBehaviour
{
const float skinWidth = 0.015f;
5 years ago
public int horizontalRayCount = 4;
public int verticalRayCount = 4;
private float horizontalRaySpacing;
private float verticalRaySpacing;
new BoxCollider2D collider;
RaycastOrigins raycastOrigins;
5 years ago
void Start() {
collider = GetComponent<BoxCollider2D>();
5 years ago
}
void Update() {
5 years ago
UpdateRaycastOrigins();
CalculateRaySpacing();
5 years ago
for (int i = 0; i < verticalRayCount; i++) {
Debug.DrawRay(raycastOrigins.bottomLeft + Vector2.right * verticalRaySpacing * i, Vector2.up * -2, Color.red);
5 years ago
}
}
void UpdateRaycastOrigins() {
Bounds bounds = collider.bounds;
bounds.Expand(skinWidth * -2);
raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y);
raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y);
raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y);
raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y);
5 years ago
}
void CalculateRaySpacing() {
Bounds bounds = collider.bounds;
bounds.Expand(skinWidth * -2);
if (horizontalRayCount < 2) {
horizontalRayCount = 2;
}
if (verticalRayCount < 2) {
verticalRayCount = 2;
}
5 years ago
horizontalRaySpacing = bounds.size.y / (horizontalRayCount - 1);
verticalRaySpacing = bounds.size.x / (verticalRayCount - 1);
}
struct RaycastOrigins {
public Vector2 topLeft;
public Vector2 topRight;
public Vector2 bottomLeft;
public Vector2 bottomRight;
5 years ago
}
}