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

本文关键字:设置 脚本 图层 CS0120 | 更新日期: 2023-09-27 18:36:39

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

错误 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;
        }
    }
}

我尝试过使用二传手,但我无法让它工作。提前感谢,祝你有美好的一天=)。

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

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 class PlayerChanger : MonoBehaviour {
  public RaycastController myRC;

-- 在检查器中,将您的"RaycastController"拖到该公共变量中

-- 现在像这样使用它

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

请阅读字面上的 1000 个 QA! 例如,如何通过 GetComponent 从另一个游戏对象中的另一个脚本访问变量?