2013-02-05 54 views
0

我正在使用unity3D Unity 3D進行編程。從Unity 3D中的另一個腳本停止第一人控制器輸入

我有一個第一人稱控制器,內置腳本CharacterMotor.js。在該腳本中,頂部有一個名爲「canControl」的變量,它是一個布爾值,並控制第一人稱控制器是否響應輸入。

我希望能夠從附加到不同對象(如多維數據集)的腳本中更改該布爾值。

這裏就是我目前正在與連接到我的多維數據集的腳本做:

#pragma strict 

var stop : GameObject; 

function Start() { 
} 

function Update() { 
    stop.GetComponent("CharacterMotor").canControl = false; 
} 

我已經拖了第一人稱控制器對象的引用檢查側欄停止變量。

這裏是我得到的錯誤:

Assets/test.js(15,45): BCE0019: 'canControl' is not a member of 'UnityEngine.Component'. 

因此,它看起來像它不能引用變量canControl在CharacterMotor.js腳本出於某種原因。

我已經找遍了,找不到我在做什麼不同。你有什麼想法?

回答

0

試試這個:

function Update() { 
    stop.GetComponent("CharacterMotor"); 
    canControl = false; 
} 

我不知道很多統一,但canControl很可能不附着到GetComponent。如果canControl是它自己的變量,那麼我的方式應該工作。 GetComponent只是獲取變量。這並不意味着它屬於GetComponent函數。

雖然我可能是完全錯誤的。這正是我閱讀代碼時所看到的。我希望我能幫上忙。

+0

我得到一個未知的標識錯誤canControl。任何其他想法? – twbbas

+0

嗯,我唯一的想法是檢查文檔的統一性,看看你的答案是否存在。 – Shawn31313

1

兩個小問題:

首先,GetComponent總是返回類型的對象 '組件'。 canControl未在Component中定義,它在CharacterMotor中定義。這意味着我們需要將其返回值轉換爲CharacterMotor。

其次,GetComponent需要使用您正在查找的組件調用GameObject。我發現最簡單的方法就是使用FindGameObjectWithTag。

下面是結果(我假設的第一人稱控制器具有標籤「球員」):

var stop : CharacterMotor; 

function Start() { 
    stop =(CharacterMotor)GameObject.FindGameObjectWithTag("Player").GetComponent("CharacterMotor"); 
} 

function Update() { 
    stop.canControl = false; 
} 
+0

^由於OP沒有澄清哪個答案是正確的,對於任何人通過互聯網陷入困境,這是正確的答案。儘管公平,但沒有理由把它放在更新循環中。 –

相關問題