如何引用不同类的非静态成员c#

时间:2014-11-25 05:38:06

标签: c# object reference

我正在尝试制作一个我的背景滚动的游戏,具体取决于我希望玩家的速度。

我尝试创建一个非静态函数,它访问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);
}

}

当我尝试从PlayerController.cs访问BackgroundScroller.speed时得到的错误是:“访问非静态成员需要一个对象引用”BackgroundScroller.speed“。

我不明白如何从PlayerController.cs中访问BackgroundScroller.speed的值。我不想创建对象引用,我只想简单地更改其他类中的值。

干杯

卢西奥

2 个答案:

答案 0 :(得分:1)

您无法静态访问speed,因为它不是静态成员。它是一个只能通过实例化的BackgroundScroller访问的实例变量。

假设Start已在某处确保BackgroundScroller.current不为空,则以下行将允许您访问使用当前滚动条的现有静态引用的速度。

BackgroundScroller.current.speed = setSpeed;

答案 1 :(得分:1)

因为speed不是静态类型,您可以通过在speed变量中添加静态来解决此问题。

尝试将您的速度类型更改为static float,例如

public static float speed;

然后你最终可以设置speed

的值
void Setspeed(float setSpeed){
    BackgroundScroller.speed = setSpeed;
}