CS0120不能从不同的脚本

时间:2016-02-28 13:51:45

标签: c# unity3d game-physics unity5

我正在创建一个游戏,我想通过更改图层蒙版来更改我的播放器可以与之碰撞的对象,但每次我尝试在不同的脚本中更改变量时都会抛出此错误

  

错误CS0120:访问非静态需要对象引用   成员`RaycastController.jumpableCollisionMask'

我创建变量的代码:

 using UnityEngine;
using System.Collections;

[RequireComponent (typeof (BoxCollider2D))]
public class RaycastController : MonoBehaviour {

    public LayerMask collisionMask;

    public LayerMask jumpableCollisionMask;

我设置变量的代码

using UnityEngine;
using System.Collections;

public class PlayerChanger : MonoBehaviour {

    public float numberOfPlayersPerLevel;


    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown (KeyCode.E)){
            RaycastController.jumpableCollisionMask = 11;
        }
    }
}

我尝试过使用setter但我无法使用它。在此先感谢,祝你有个美好的一天=)。

1 个答案:

答案 0 :(得分:2)

jumpableCollisionMask = 11

RaycastController.jumpableCollisionMask = 11

请注意,您可能还有其他问题:

您可以像这样设置图层蒙版(只是int):

int layerMaskDogs = 1 << LayerMask.NameToLayer("Dogs");
int layerMaskFruits = 1 << LayerMask.NameToLayer("Fruits");

OK?

切勿使用“= 11”或任何数字或其他值。在Unity中,现在只能使用1<<LayerMask.NameToLayer("Blah")

形式

最后请注意,您使用public来声明LayerMask。这可能有点令人困惑 - 只有在在编辑器中设置时才会这样做。如果这就是你想要做的,那很好。但如果您不需要这样做,只需使用private

最后请注意,您有两个不同的脚本!!! 这是Unity中最基本的问题。幸运的是,它很容易解决:

- 在您的SECOND脚本中添加公共变量

public class PlayerChanger : MonoBehaviour {
  public RaycastController myRC;

- 在检查员中,将您的“RaycastController”和拖动到该公共变量

- 现在就像这样使用

public class PlayerChanger : MonoBehaviour {
     public RaycastController myRC;
     ...
     ...
     ...
     //whenever you need to use it...
     myRC.jumpableCollisionMask = 11;

请在此阅读千字节QA!例如,How to access a variable from another script in another gameobject through GetComponent?