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