An instance of type 'UnityEngine.BoxCollider2D' is...

Hi, I am getting this error code on my new js script -
Assets/Scripts/MovementScript.js(80,88): BCE0020: An instance of type ‘UnityEngine.BoxCollider2D’ is required to access non static member ‘size’.

First of all, i am not sure what this means
Secondly it says the error is on this line -
if(vm <= 0 && contact.point.y <= transform.position.y - (BoxCollider2D.size.y/2) && Vector2.Angle(Vector2.up, contact.normal) <= slopeLimit){

I have checked through everything but i am still not sure what the problem is.

Here is my entire code incase you need it -

#pragma strict
var moveSpeed : float = 8;
var jumpSpeed : float = 25;
var fallSpeed : float = 64;
var maxFallSpeed : float = 60;
var maxUpSpeed : float = 25;
var slopeLimit : float = 45;
var dashSpeed : float = 120;
var fly : boolean;
 
private var vm : float;
var onGround : boolean;
private var xScale : float;
private var h : float;
private var v : float;
private var jump : boolean;
private var anim : Animator;
private var boxcoll : BoxCollider2D; //If boxCollider2D is used replace w/ ... private var boxColl : BoxCollider2D;
 
function Start () {
        xScale = transform.localScale.x; //Get correct starting Orientation for player.
        anim = gameObject.GetComponent("Animator"); //Get Animations for character
        boxcoll = GetComponent(BoxCollider2D); //if boxCollider2D is used replace w/... boxColl = GetComponent(BoxCollider2D);
}
 
function Update () {
        h = Input.GetAxisRaw("Horizontal"); //get horizontal input
        v = Input.GetAxisRaw("Vertical"); //get vertical input
        jump = Input.GetKey(KeyCode.Space); //get jump input
}
 
function FixedUpdate(){
        if(onGround && jump){ //Are we grounded can we jump?
                vm = jumpSpeed;
        }
       
        var moveH : float = h * moveSpeed * Time.deltaTime; //Smooth horizontal movement
        //Flip character orientation
        if(h < 0){
                transform.localScale.x = -xScale;
        } else if(h > 0){
                transform.localScale.x = xScale;
        }
       
        anim.SetFloat("VM", vm); //Animate VM parameter
        anim.SetBool("Grounded", onGround); //Animate Grounded parameter
        rigidbody2D.AddForce(Vector2.right * moveH); //Apply horizontal movement
        rigidbody2D.AddForce(Vector2.up * vm); //Apply vertical movement
       
        if(fly){ //Can we fly?
                if(v > 0){
                        //Fly like a bird!!!
                        vm += v * Time.deltaTime * 20;
                } else {
                        //Uh oh it's gravity
                        vm -= fallSpeed * Time.deltaTime;
                }
        } else {
                //Gravity ... ouch!
                vm -= fallSpeed * Time.deltaTime;
        }
       
        vm = Mathf.Clamp(vm, -maxFallSpeed, maxUpSpeed); //Clamp vertical speeds
        rigidbody2D.velocity = Vector2.zero; //Stop movement if there is no input
        onGround = false; //Clear out grounding check
}
 
function OnCollisionEnter2D(c : Collision2D){
        CheckCollision(c);
}
 
function OnCollisionStay2D(c : Collision2D){
        CheckCollision(c);
}
 
function CheckCollision(c : Collision2D){
        for(var contact in c.contacts){
                //Check for floor hit
                //If boxCollider2D is used replace circCollider.radius w/ (boxCollider2D.size.y/2)
                if(vm <= 0 && contact.point.y <= transform.position.y - (BoxCollider2D.size.y/2) && Vector2.Angle(Vector2.up, contact.normal) <= slopeLimit){
                        onGround = true;
                        vm = Mathf.Max(0, vm);
                }
        }
 }

Please ask if you need any more information.

Does the object you have this script on have a box collider? If not attach one by selecting it in the editor, go Components->Physics2D->Box Collider

Yes it does, i still get the error code

1 Answer

1

You are close. You need to use the ‘boxcoll’ variable you initialized in Start() to access ‘size’:

if(vm <= 0 && contact.point.y <= transform.position.y - (boxcoll.size.y/2) && Vector2.Angle(Vector2.up, contact.normal) <= slopeLimit){

Thanks, This stopped but now i have another problem, i have applied the script and now when i test the game the characters 3 frame animation plays but he doesn't move in and direction, do you know how i can fix this?