CS0120 无法从不同脚本设置图层蒙版

CS0120 Cant set layer mask from different script

我正在制作一个游戏,我想通过更改图层蒙版来更改我的玩家可以与哪些对象发生碰撞,但是每次我尝试更改不同脚本中的变量时都会抛出此错误

Error CS0120: An object reference is required to access non-static member `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 但我无法让它工作。提前致谢,祝你有美好的一天 =)。

jumpableCollisionMask = 11

没有

RaycastController.jumpableCollisionMask = 11

请注意,您可能还有另一个问题:

你像这样设置图层蒙版(就是 int):

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

好吗?

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

形式

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


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

-- 添加一个 public 变量 到你的第二个脚本

public class PlayerChanger : MonoBehaviour {
  public RaycastController myRC;

-- 在检查器中将你的 "RaycastController" 和 拖到 public 变量

-- 现在这样使用

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

请仔细阅读关于此的 1000 多条质量检查!例如,How to access a variable from another script in another gameobject through GetComponent?