2014-11-25 3 views
0

Я пытаюсь создать игру, в которой мой фон прокручивается в зависимости от того, насколько быстро я хочу, чтобы игрок шел.Как ссылаться на нестатический член другого класса C#

Я попытался создать нестационарную функцию, которая обращается к BackgroundScroller.speed как простой способ передать значение.

.

(PlayerController.cs)

void Setspeed(float setSpeed){ 

BackgroundScroller.speed = setSpeed; 

} 

BackgroundScroller.cs выглядит следующим образом:

using UnityEngine; 
using System.Collections; 

public class BackgroundScroller : MonoBehaviour { 

public float speed = 0; 
public static BackgroundScroller current; 

float pos = 0; 

void Start() { 
    current = this; 
} 

public void Go() { 
    pos += speed; 
    if (pos > 1.0f) 
     pos-= 1.0f; 


    renderer.material.mainTextureOffset = new Vector2 (pos, 0); 
} 

} 

.

Я получаю ошибку, когда я пытаюсь и BackgroundScroller.speed доступа из PlayerController.cs является:. «Ссылка на объект требуется для доступа к нестатическому члену„BackgroundScroller.speed“

Я не понимаю, как чтобы получить доступ к значению BackgroundScroller.speed из PlayerController.cs по существу. Я не хочу, чтобы создать ссылку на объект, я просто хочу, чтобы просто изменить значение в другом классе.

Приветствия

Lucio

ответ

1

Вы не можете статически обращаться к speed, потому что это не статический член. Это переменная экземпляра, доступ к которой возможен только через экземпляр BackgroundScroller.

Предполагая, что Start уже был вызван где-то, что BackgroundScroller.current не имеет значения null, следующая строка даст вам доступ к скорости для использования существующей статической ссылки для текущего скроллера.

BackgroundScroller.current.speed = setSpeed; 
+0

отлично работает ура. Я тоже идиот, thecurrent используется ранее в учебнике, которое я использовал, которое вызывает go(). Еще раз спасибо. – LucioMaximo

1

Поскольку speed не является статическим типом, и вы можете исправить это путем добавления статического в speed переменной.

Попробуйте изменить тип скоростную static float, например

public static float speed; 

, то вы можете, наконец, установить значение speed

void Setspeed(float setSpeed){ 
    BackgroundScroller.speed = setSpeed; 
} 
Смежные вопросы