Access to a function from a parent class who have a GetComponent
Hey guys, I've been rewriting the code of my game to allow multiple characters and I have trouble using subclasses.
What I want to do is creating a class "PlayerController" who handle basic stuff that all my characters will do I.E. Moving, Taking Damage, Jumping, etc. but I have trouble handling the moving part.
Here is my code of the PlayerController:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
// Déplacement
private int moveSpeed;
private float move;
// Use this for initialization
void Start () {
}
// Update is called once per frame
public void Update () {
move = Input.GetAxis("Horizontal");
}
void FixedUpdate () {
}
public void Move () {
GetComponent<Rigidbody2D>().velocity = new Vector2 (GetMove() * GetMoveSpeed(), this.GetComponent<Rigidbody2D>().velocity.y);
}
public void SetMoveSpeed(int newMoveSpeed) {
moveSpeed = newMoveSpeed;
}
public int GetMoveSpeed(){
return moveSpeed;
}
public float GetMove(){
return move;
}
}
And now one subclass script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NileigController : PlayerController {
// Use this for initialization
void Start () {
SetMoveSpeed (10);
}
// Update is called once per frame
new void Update () {
PlayerController.Update();
}
new void FixedUpdate () {
PlayerController.Move ();
}
}
But I got these errors:
Assets/Scripts/NileigController.cs(14,20): error CS0120: An object reference is required to access non-static member 'PlayerController.Update()'
Assets/Scripts/NileigController.cs(18,20): error CS0120: An object reference is required to access non-static member 'PlayerController.Move()'
The NileigController is on a GameObject that got a RigidBody2D and a BoxCollider2D.
Answer by Chikari · Feb 09, 2017 at 01:21 PM
When you are calling PlayerController.Update(), you are not accessing your parent function, but the function Update() of the PlayerController class, which you have not initialised. Thus, the compiler complains that it's not set to static, because you can call classes' static functions without them being initialised.
However, you want to access the function of your parent class. This can be done like this:
new void Update () {
base.Update();
}
new void FixedUpdate () {
base.Move ();
}
But isn't the parent class of my class NileigController PlayerController? I'm confused
Your answer
Follow this Question
Related Questions
Getting the type of the subclass 0 Answers
Check if script is a particular Class 1 Answer
Define attacks to choose from 1 Answer
How to inherit a boolean 2 Answers
Polymorphism on member attribute 1 Answer