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;
}
}
}
我尝试过使用二传手,但我无法让它工作。提前感谢,祝你有美好的一天=)。
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 从另一个游戏对象中的另一个脚本访问变量?