2016-01-12 63 views
0

我正在研究Unity 5中的演示音頻項目,並且遇到了一些問題。我的目標是將currentHealth(包含在單獨的「PlayerHealth」腳本中)的值賦予FMOD中的一個參數,以隨着播放器的健康狀況的下降調製音樂(使其更加強烈)。我不以任何方式編程,但已被迫讓我的手髒,以實現統一5.無法將`object'表達式轉換爲`float'類型 - HealthParam.SetValue(PlayerHealth.currentHealth);

HealthParam.setValue (PlayerHealth.currentHealth); 

這行代碼是使統一不高興的音樂。我已經認識到它可能與靜態和實例成員之間的差異有關,但我又不是程序員,真的不知道如何鑽研這些雜草。

的錯誤是:

「參數#1' cannot convert對象 '表達式來鍵入'浮動'」

「最好重載方法匹配 `FMOD.Studio.ParameterInstance.setValue(浮點)」有一些無效 參數」

「的對象引用需要訪問非靜態成員 `PlayerHealth.currentHealth「」

下面是腳本:

using UnityEngine; 
using System.Collections; 

public class MusicManager : MonoBehaviour 
{ 


public int startingHealth = 100;        
public int currentHealth; 
public PlayerHealth playerHealth; 
GameObject player; 

[FMODUnity.EventRef] 
public string ScaryMusic = "event:/ZombunnyHorrorMusic"; 
FMOD.Studio.EventInstance MusicEv; 
FMOD.Studio.ParameterInstance HealthParam; 


void awake() 
{ 
//  player = GameObject.FindGameObjectWithTag ("Player"); 
//  playerHealth = player.GetComponent <PlayerHealth>(); 
} 

void Start() 
{ 
    MusicEv = FMODUnity.RuntimeManager.CreateInstance (ScaryMusic); 
    MusicEv.getParameter ("Health", out HealthParam); 
    MusicEv.start(); 
} 

void update() 
{ 
//  currentHealth = Mathf.Abs (PlayerHealth.currentHealth); 
    HealthParam.setValue (PlayerHealth.currentHealth); 
} 

void OnDestroy() 
{ 
    MusicEv.stop (FMOD.Studio.STOP_MODE.IMMEDIATE); 
} 


} 
+2

@請發佈'HealthParam'類定義。 – tchelidze

+0

你可以分享'HealthParam'類的代碼嗎? –

回答

0

嘛,PlayerHealth是一類和實例變量playerHealthPlayerHealth類型。

我猜你真正想要的是

HealthParam.setValue(playerHealth.currentHealth); 

這將訪問實例變量而不是類的。這是最後一條錯誤消息的建議。

通過使用PlayerHealth.currentHealth您建議有一個名爲currentHealth的班級成員(static),這顯然不存在。使用playerHealth.currentHealth您可以訪問當前所謂的PlayerHealth實例的值。

短「半顯影劑」與非靜態

類的每個成員變量版本的靜態可以是一個類變量(聲明static)或一個實例變量(不static)。可以訪問類變量而不需要該類的當前實例(使用new創建)。一個實例變量(如名稱所暗示的)只有當你有一個類的實例時纔可用。

例子:

public class StaticVSNonStatic 
{ 
    public static int StaticValue; 
    public int NonStaticValue; 
} 

以下工作:

StaticVSNonStatic.StaticValue = 5; 

下列不:

StaticVSNonStatic.NonStaticValue = 5; 

您需要的StaticVSNonStatic類的實例後:

StaticVSNonStatic instance = new StaticVSNonStatic(); 
instance.NonStaticValue = 5; 

請注意,類變量實際上應該是一個例外,因爲通常情況下,具有類實例的點應具有遵循相同數據模型但包含不同數據的單獨「記錄」。

+0

謝謝你的解釋。從技術上講,這就是代碼沒有編譯的原因。但是,有一個更大的問題是不允許代碼按我的意圖工作。儘管將「PlayerHealth」更改爲「playerHealth」修復了錯誤,但代碼仍未利用「currentHealth」的正確值。因此,音樂不會因玩家的健康而改變。 –

+0

^之所以這樣,我對此仍感到困惑,是因爲有兩個「PlayerHealth」腳本。由於這是一個教程項目,原始開發者在遊戲中包含了每個腳本的2個副本。因此,在我的MusicManager腳本中調用「PlayerHealth」時,它會調用場景中未使用的腳本。附加的「PlayerHealth」版本在代碼中有一個名稱空間,我只需在調用腳本時包含該名稱空間。 儘管這是一個簡單的解決方案,但弄清楚真的很痛苦。 –

0

錯誤的描述說明了一切。您嘗試訪問實例成員而不在行中提供對象引用。

HealthParam.setValue (PlayerHealth.currentHealth); 

我不知道你的PlayerHealth的代碼是什麼樣子,但我認爲你需要將其更改爲:

HealthParam.setValue (playerHealth.currentHealth); 

只要確保你的playerHealth變量在使用它之前,正確初始化(你的初始化註釋在清醒方法)。

0

我想你想改變你的更新功能如下:

void update() { 
    HealthParam.setValue (playerHealth.currentHealth); 
} 
0

問題: 你是不是想「HealthParam.setValue(currentHealth)」,其中「currentHealth」是一個「詮釋」場類「MusicManager」? 如果不是,「PlayerHealth」類是否有公共字段「currentHealth」?如果班級「PlayerHealth」,您可以顯示API嗎? 如果是,請參閱how to convert int to float 將'int'轉換爲'float'

+0

我很抱歉地說,但這應該是一個評論。請將此改爲回答而不是提問。 –

相關問題