- Home /
Script Errors!
Player Physics
using UnityEngine; using System.Collections;
public class PlayerPhysics : MonoBehaviour {
public LayerMask collisionMask;
private BoxCollider collider;
private Vector3 size;
private Vector3 center;
private float skin = .005f;
[HideInInspector]
public bool grounded;
Ray ray;
RaycastHit hit;
void Start() {
collider = GetComponent<BoxCollider>();
s = gameObject.collider.size;
c = gameObject.collider.center;
}
public void Move(Vector2 moveAmount) {
float deltaX = moveAmount.x;
float deltaY = moveAmount.y;
Vector2 p = transform.position;
grounded = false
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 downwards 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);
}
}
Player Controller
using UnityEngine; using System.Collections;
[RequireComponent(typeof(PlayerPhysics))] public class PlayerController : MonoBehaviour {
// Player Handling
public float gravity = 20;
public float speed = 8;
public float acceleration = 12;
private float currentSpeed;
private float targetSpeed;
private Vector2 amountToMove;
private PlayerPhysics playerPhysics;
void Start () {
playerPhysics = GetComponent<PlayerPhysics>();
}
void Update () {
targetSpeed = Input.GetAxisRaw("Horizontal") * speed;
currentSpeed = IncrementTowards(currentSpeed, targetSpeed,acceleration);
if (playerPhysics.grounded) {
amountToMove.y = 0;
// Jump
if (Input.GetButtonDown("Jump")) {
amountToMove.y = jumpHeight;
amountToMove.x = currentSpeed;
amountToMove.y -= gravity * UnityEngine.Time.deltaTime;
playerPhysics.Move(amountToMove * UnityEngine.Time.deltaTime);
}
//Increase n towards target by speed
private float IncrementTowards(float n, float target, float a) {
if (n == target) {
return n;
}
else {
float dir = Mathf.Sign(target - n); // Must n be increased or decreased to get closer to target
n += a * UnityEngine.Time.deltaTime * dir;
return (dir == Mathf.Sign(target-n))? n: target; // If n has passed target then return target, otherwise return n
}
}
}
Is there any errors you can see and/or match these? Assets/Scripts/PlayerController.cs(39,15): error CS1525: Unexpected symbol private' Assets/Scripts/PlayerPhysics.cs(34,19): error CS1525: Unexpected symbol
for' Assets/Scripts/PlayerPhysics.cs(34,37): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement Assets/Scripts/PlayerPhysics.cs(34,43): error CS1525: Unexpected symbol )', expecting
;' Assets/Scripts/PlayerPhysics.cs(63,36): error CS1519: Unexpected symbol (' in class, struct, or interface member declaration Assets/Scripts/PlayerPhysics.cs(63,51): error CS1519: Unexpected symbol
)' in class, struct, or interface member declaration Assets/Scripts/PlayerPhysics.cs(65,1): error CS8025: Parsing error
I've been through the code multiple times and cant find a solution to what's wrong and how to fix it.
Answer by fafase · May 03, 2014 at 12:27 PM
You are missing the closing of the update:
void Update () {
targetSpeed = Input.GetAxisRaw("Horizontal") * speed;
currentSpeed = IncrementTowards(currentSpeed, targetSpeed,acceleration);
if (playerPhysics.grounded) { //this one opens
amountToMove.y = 0;
// Jump
if (Input.GetButtonDown("Jump")) {// this one opens
amountToMove.y = jumpHeight;
amountToMove.x = currentSpeed;
amountToMove.y -= gravity * UnityEngine.Time.deltaTime;
playerPhysics.Move(amountToMove * UnityEngine.Time.deltaTime);
// no closing to both
}
Answer by mattyman174 · May 03, 2014 at 12:30 PM
Your missing 2 } after your "void Update()" in PlayerController.
Your missing an ; after "grounded = false" in PlayerPhysics.
The following code is wrong.
s = gameObject.collider.size; // s is not properly defined. size does not exist as a member of collider.
c = gameObject.collider.center; // c is not properly defined. center does not exist as a member of collider.
Fixing these will remove your errors.