2014-04-15 91 views
0

我一直在尋找這個幾個小時,並沒有得到任何結果。我有一個名爲GameSetup.js的腳本,它連接到一個空的遊戲對象(名爲GM)。它擁有對我當前相機的引用,並具有獲取屏幕寬度和其他內容的功能。我想從其他腳本訪問這些函數(和變量)。所以例如我有另一個空的遊戲對象叫做「Blocks」,它的一個組件是BlockGenerator.js,它具有BlockGenerator()函數。我希望能夠像這樣使用屏幕寬度()在BlockGenerator():從Unity中的另一個腳本訪問函數和變量

BlockGenerator.js

BlockGenerator(){ 
var Blocknumber : int = GameSetup.ScreenWidth/blockWidth; 
} 

GameSetup.js

function ScreenWidth() : float{ 
     var screenWidth : float = (mainCam.ScreenToWorldPoint(new Vector3(Screen.width,0f, 0f)).x)* 2; 
     return screenWidth; 

當然GameSetup的

無法識別在BlockGenerator.js中,例如,如果我使用GetComponent()。我不確定是否可以將GM遊戲對象拖放到檢查器中,並將其傳遞給BlockGenerator.js,我還沒有嘗試過。但事情是,它使遊戲腳本非常複雜,沒有理由。我如何設置和訪問全局函數和變量?

回答

0

在包含BlockGenerator方法的類中,需要定義GameSetup類型的公共變量。然後在檢查器中拖動您希望訪問其實例變量的對象。之後,您可以訪問BlockGenerator方法中的對象並調用其方法並訪問其實例變量。

另一種方法是在BlockGenerator中通過標記在https://docs.unity3d.com/Documentation/ScriptReference/GameObject.FindGameObjectsWithTag.html中找到對象,或者按照類型搜索http://docs.unity3d.com/Documentation/ScriptReference/Object.FindObjectOfType.html

+0

我不想處理檢查員,因爲如果你有一個由幾個腳本使用的變量,將它在檢查器中的對象拖到所有腳本將是一團糟。但是我使用了你建議的第二種方法。所以我標記了GM GameObject並在BlockGenerator.js中使用了以下行來訪問ScreenWidth函數: var screenWidth:float = GameObject.FindGameObjectWithTag(「GM」)。GetComponent(GameSetup).ScreenWidth(); – user3383731

相關問題