2016-02-28 19 views
1

我正在製作一個遊戲,我想通過更改圖層蒙版來更改我的玩家可以碰撞哪些對象,但是每次我嘗試更改不同腳本中的變量時,它都會拋出此錯誤CS0120無法從不同的腳本設置圖層掩模

錯誤CS0120:一個對象引用需要訪問非靜態 構件`RaycastController.jumpableCollisionMask」

爲其中i創建變量的代碼:

using UnityEngine; 
using System.Collections; 

[RequireComponent (typeof (BoxCollider2D))] 
public class RaycastController : MonoBehaviour { 

    public LayerMask collisionMask; 

    public LayerMask jumpableCollisionMask; 

爲其中i設置變量

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

我一直在使用二傳手嘗試,但我無法得到它的工作的代碼。預先感謝,並有一個愉快的一天=)。

回答

2
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; 

請閱讀從字面上看,千篇一律的QA!例如,How to access a variable from another script in another gameobject through GetComponent?

+1

嗨@Paradizigmania希望它有幫助,不要猶豫,以提出更多問題 – Fattie

+0

感謝您的答案。我只是試過了,但它返回CS0103:名稱'jumpableCollisionMask'在當前上下文中不存在 – Paradizigmania

+0

啊 - 你有他們在兩個不同的腳本?!?!?! – Fattie