我正在创建一个游戏,我想通过更改图层蒙版来更改我的播放器可以与之碰撞的对象,但每次我尝试在不同的脚本中更改变量时都会抛出此错误
错误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但我无法使用它。在此先感谢,祝你有个美好的一天=)。
答案 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?