Cant find error in script and i have to finish my game for a project at school in less than 4 hours can someone help
using UnityEngine;
using System.Collections;
[RequireComponent (typeof(BoxCollider))]
public class PlayerPhysics : MonoBehaviour {
public LayerMask collisionMask;
private BoxCollider collider;
private Vector3 s;
private Vector3 c;
private float Skin = .005f;
[HideInInspector]
public bool grounded;
Ray ray;
RaycastHit hit;
void Start() {
collider = GetComponent<BoxCollider>();
s = collider.size;
c = collider.center;
}
public void Move(Vector2 moveAmount) {
float deltaY = moveAmount.y;
float deltaX = moveAmount.x;
Vector2 p = transform.position;
for (int i = 0; i<=3; i ++) {
float dir = Mathf.Sign(deltaY);
float x = (p.x + c.x - s.x/2) + s.x/2 * i; // Left, centre and then rightmost point of collider
float y = p.y + c.y + s.y/2 * dir; // Bottom of collider
ray = new Ray(new Vector2(x,y), new Vector2(0,dir));
if (Physics.Raycast(ray,out hit,Mathf.Abs(deltaY,CollisionMask)) {
// Get distance between player and ground
float dst = Vector3.Distance (ray.origin, hit.point);
// stop player's downward movement after coming within skin width of a collider
if (dst > skin) {
deltaY = -dst + skin;
}
else {
deltaY = 0;
}
grounded = true;
break;
}
}
Vector2 finalTransform = new Vector2(deltaX,deltaY);
transform.Translate(finalTransform);
}
}
I fear there are a few problems you got above
firstly you confusing Vectors
for example transform.position returns a Vector3 Not A vector2
same as the declaration for the Ray Paths
Mathf.Abs(deltaY,CollisionMask) ----> dont understand what you achive with this so i removed it for now
cant test if the code actually works but should fix most of the vector problems
public LayerMask collisionMask;
private BoxCollider collider;
private Vector3 s;
private Vector3 c;
private float Skin = .005f;
public bool grounded;
Ray ray;
RaycastHit hit;
void Start ()
{
collider = GetComponent<BoxCollider> ();
s = collider.size;
c = collider.center;
}
public void Move (Vector2 moveAmount)
{
float deltaY = moveAmount.y;
float deltaX = moveAmount.x;
Vector3 p = transform.position;
for (int i = 0; i<=3; i ++) {
float dir = Mathf.Sign (deltaY);
float x = (p.x + c.x - s.x / 2) + s.x / 2 * i; // Left, centre and then rightmost point of collider
float y = p.y + c.y + s.y / 2 * dir; // Bottom of collider
// Ray Also needs Vector3
ray = new Ray (new Vector3 (x, y, 0), new Vector3 (0, dir, 0));
//Mathf.Abs(deltaY,CollisionMask) ??
if (Physics.Raycast (ray, out hit)) {
// Get distance between player and ground
float dst = Vector3.Distance (ray.origin, hit.point);
// stop player's downward movement after coming within skin width of a collider
if (dst > Skin) { // skin was delcared with Capital S
deltaY = -dst + Skin;
} else {
deltaY = 0;
}
grounded = true;
break;
}
}
Vector3 finalTransform = new Vector3 (deltaX, deltaY, 0);
transform.Translate (finalTransform);
}