0

I am currently working on making a class accessible from other scripts. Below is what I have coded.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(BoxCollider2D))]
// Start is called before the first frame update
    public class _move
    {

        private float _sizex;
        private float _sizey;
        public _move(float sizx, float sizy....etc)
        {        


            _sizex = sizx;
            _sizey = sizy;
        }


        public  void regularmove(float sizex, float sizey...etc)
        {
            GameObject _player;
            _player =  GameObject.GetComponent<GameObject>();
            BoxCollider2D bc2d;
            bc2d = _player.GetComponent <BoxCollider2D>();
            bc2d.offset = new Vector2(locationx + 1, locationy);
        }
    }

however, when I try to compile it, it gives me an error.

cannot access non-static method"GetComponent"

on this line of code

_player =  GameObject.GetComponent<GameObject>();

I do not know why this is happening because I have not declared the class as static, and do not really know the properties of GetComponent that well. Can someone tell me what is happening and how I can solve this? Also, when I change

GameObject _player; 
to
public GameObject player;

the scripts below suddenly cease to work, giving me errors like

cannot resolve symbol _player 

what exactly is happening here? Thanks in advance!

Leonardo
  • 2,439
  • 33
  • 17
  • 31

1 Answers1

0

Whatever script creating the instance of the _move class (This is bad naming btw, it should be Move) should also pass its gameObject to the constructor.

// attributes here are not valid if your class is not a MonoBehaviour
public class Move
{
    GameObject m_object;
    public Move(GameObject obj, ...)
    {
        m_object = obj;
    }
}

if your class is meant to be a MonoBehaviour component, then it has a GameObject member already and you can use the attributes:

[RequireComponent(typeof(BoxCollider2D),typeof(Rigidbody2D))]
// Start is called before the first frame update
public class Move : MonoBehaviour
{
     void Start()
     {
         Debug.Log(gameObject.name);
     }
}
Everts
  • 10,408
  • 2
  • 34
  • 45