Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法转换'object';类型为“float';”的表达式-HealthParam.SetValue(PlayerHealth.currentHealth);_C#_Unity3d_Monodevelop_Fmod - Fatal编程技术网

C# 无法转换'object';类型为“float';”的表达式-HealthParam.SetValue(PlayerHealth.currentHealth);

C# 无法转换'object';类型为“float';”的表达式-HealthParam.SetValue(PlayerHealth.currentHealth);,c#,unity3d,monodevelop,fmod,C#,Unity3d,Monodevelop,Fmod,我正在Unity 5中进行一个演示音频项目,遇到了一些问题。我的目标是将currentHealth(包含在单独的“PlayerHealth”脚本中)的值指定给FMOD中的一个参数,该参数随着播放器健康度的降低而调节音乐(使其更强烈)。无论如何,我不是一个程序员,但我不得不动手去实现Unity 5中的音乐 HealthParam.setValue (PlayerHealth.currentHealth); 这一行代码让Unity不高兴。我认为这可能与静态成员和实例成员之间的差异有关,但我又不是一

我正在Unity 5中进行一个演示音频项目,遇到了一些问题。我的目标是将currentHealth(包含在单独的“PlayerHealth”脚本中)的值指定给FMOD中的一个参数,该参数随着播放器健康度的降低而调节音乐(使其更强烈)。无论如何,我不是一个程序员,但我不得不动手去实现Unity 5中的音乐

HealthParam.setValue (PlayerHealth.currentHealth);
这一行代码让Unity不高兴。我认为这可能与静态成员和实例成员之间的差异有关,但我又不是一个程序员,我真的不知道如何深入研究这个问题

错误是:

“参数
#1'无法将
object'表达式转换为'float'类型”

“匹配的最佳重载方法” `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);
}


}
使用UnityEngine;
使用系统集合;
公共类音乐管理者:单一行为
{
公共int启动健康=100;
公共卫生;
公共玩家健康玩家健康;
游戏对象玩家;
[FMODUnity.EventRef]
公共字符串ScaryMusic=“事件:/ZombunnyHorrorMusic”;
FMOD.Studio.EventInstance音乐v;
FMOD.Studio.ParameterInstance HealthParam;
无效唤醒()
{
//player=GameObject.FindGameObjectWithTag(“player”);
//playerHealth=player.GetComponent();
}
无效开始()
{
MusicEv=FMODUnity.RuntimeManager.CreateInstance(ScaryMusic);
MusicEv.getParameter(“健康”,out HealthParam);
MusicEv.start();
}
无效更新()
{
//currentHealth=Mathf.Abs(PlayerHealth.currentHealth);
HealthParam.setValue(PlayerHealth.currentHealth);
}
void OnDestroy()
{
音乐v.stop(FMOD.Studio.stop\u模式。立即);
}
}

那么,
PlayerHealth
是一个类,实例变量
PlayerHealth
的类型是
PlayerHealth

我想你真正想要的是

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;

请注意,类变量实际上应该是一个例外,因为拥有类实例的目的通常是拥有遵循相同数据模型但包含不同数据的单独“记录”。

错误描述说明了一切。您正在尝试访问实例成员,而不在行中提供对象引用

HealthParam.setValue (PlayerHealth.currentHealth);
我不知道您的PlayerHealth代码是什么样子,但我认为您需要将其更改为:

HealthParam.setValue (playerHealth.currentHealth);

在使用playerHealth变量之前,请确保该变量已正确初始化(您已在awake方法中注释掉初始化)。

我认为您需要将更新函数更改为以下内容:

void update() {
    HealthParam.setValue (playerHealth.currentHealth);
}
问题: 您是否正在尝试“HealthParam.setValue(currentHealth)”,其中“currentHealth”是类“MusicManager”的“int”字段? 如果没有,类“PlayerHealth”是否有公共字段“currentHealth”?如果类为“PlayerHealth”,您可以显示API吗? 如果是,请参阅
要将“int”转换为“float”

@请发布
HealthParam
类定义。您可以共享
HealthParam
类的代码吗?很抱歉,这应该是一个注释。请把这句话改为回答,而不是提问。谢谢你的解释。从技术上讲,这就是代码没有编译的原因。然而,还有一个更大的问题,那就是不允许代码按我的预期运行。即使将“PlayerHealth”更改为“PlayerHealth”修复了错误,代码仍然没有使用正确的“currentHealth”值。因此,音乐并没有随着演奏者的健康而改变。^原因是有两个“PlayerHealth”脚本,我对此仍然感到困惑。因为这是一个教程项目,最初的开发者在游戏中包含了每个脚本的2个副本。因此,在MusicManager脚本中调用“PlayerHealth”时,它会调用场景中未使用的脚本。附加的“PlayerHealth”版本在代码中有一个名称空间,我只需在调用脚本时包含该名称空间。尽管这是一个简单的解决方案,但要想弄清楚这一点确实很痛苦。