2016-02-20 46 views
0

我需要使用腳本中定義的一些變量,但是當我調用它們時,它們的值爲0.我不知道我在做什麼錯誤。使用另一個腳本中的變量int 5

實施例:

Script1.cs

public int cont; 


public void Method() { cont++; } 

void Update() { Method(); } 

Script2.cs

public Script1 usingScript1; 

void MethodX() 
{ 
    usingScript1.GetComponent<Script1>(); 
    Debug.Log(usingScript1.cont); 
} 

void Update() { MethodX(); } 

此腳本應顯示 「CONT」 變量增大,因爲它被從更新()調用,但這並沒有發生。當我打電話時,它是0並且不增加。

此外,我指的是在Ispector中包含Script1.cs的對象。這一定是我錯過的一件簡單的事情。我甚至嘗試調用Method()。

+0

我投票結束這個問題作爲題外話,因爲它是一個億次重複。有趣的是,這是來自嘗試Unity的新愛好者關於Unity的唯一最常見的問題。 – Fattie

+1

_「請勿使用更新......專家永遠不需要使用它」_ - 不正確。_「[更新是最常用的函數來實現任何類型的遊戲行爲](http://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html)」_ – MickyD

+0

嗨@JoeBlow,你在談論避免'當涉及到RigidBodies時更新?在這種情況下,我同意你的看法。否則,重寫'Update'沒有什麼問題,因爲你可以在我的spiffy中看到_ [GPGPU n-Body galaxy simulation](https://mickyd.wordpress.com/2014/02/01/n-body-galaxy-simulation - 使用 - 計算 - 着色器上-GPGPU的通團結-3D /)_。 :) – MickyD

回答

2

此代碼中的任何位置都不會調用名爲Method()的函數。由於它是修改名爲cont的變量的唯一值,如果它永遠不會被調用,那麼cont將永遠不會從其默認值零改變。

編輯:哎呀! 好了,這裏的實際問題是,你需要改變

usingScript1.GetComponent<Script1>(); 

usingScript1 = GetComponent<Script1>(); 

的代碼後者行設置變量usingScript1,這樣就可以在代碼中使用它。前者只是簡單地調用一個函數,不會對返回的信息做任何事情。

編輯:GetComponent()將只工作是兩個腳本attatched相同的gameobject。否則,您可以使用FindObjectOfType()。

+0

我試過調用方法,也沒有工作。 –

+0

哦!對不起,我誤解了你的代碼。 – HalpPlz

+0

這是完全錯誤的傢伙:) – Fattie

2

只是爲了增加每個人都提到的,你有嘗試初始化「續」?

public int cont; 

成爲

public int cont = 0; 

也可以嘗試在開始對其進行初始化()函數,如果這行不通。

+0

是的。我試着在Start()中初始化它。 –

0

我設法解決它,從來沒有想過它。儘可能簡單。 Instad創建一個對象,我只是將變量設置爲靜態,並使用該類調用'em'。

Script1.cs

public static cont; 

Script2.cs

Script1.cont; 

和它的作品。

+0

通常不要在Unity中這樣做 – Fattie

相關問題