c# - 我可以在 WaitForSeconds() 中使用可为空的浮点数(浮点数?)吗?
问题描述
我的平台游戏有一个默认的“未受伤”时间,我的玩家从受伤状态过渡到正常状态;我认为正常时间是 0.54 秒。但是对于特定对象,我希望不受伤害的时间更短。我通过将其添加到我未受伤的 IEnumerator 来做到这一点
IEnumerator Unhurt(float? time2)
{
time2 = 4;
SoundMan1.PlayHurtSound();
// SoundMan1.PlayerHurt3.PlayOneShot(SoundMan1.PlayrHurtClips3[Random.Range(0, 3)]);
Debug.Log("Unhurting!");
if(time2 == null)
{
} if(time2 > .02f && time2!=null)
{
yield return new WaitForSeconds(time2);
}
else
{
yield return new WaitForSeconds(unhurttime);
}
IsHurt = false;
rb.constraints = RigidbodyConstraints2D.None;
rb.constraints = RigidbodyConstraints2D.FreezeRotation;
Debug.Log("Unhurt");
}
在我的尖峰脚本(我从中调用这个协程的脚本。)这是调用它的代码..
collision.gameObject.GetComponent<Player>().StartCoroutine("Unhurt");
我想要这样,如果我在“Unhurt”之后不写任何东西,那么 time2 会浮动吗?将为空,它只会等待默认持续时间。问题是 WaitForSeconds(time2); 有错误。它说不能转换浮动?浮。
如果我在“Unhurt”之后添加 .2f 或其他任何内容并将其作为 time2 传递,我希望浮点数不为空,然后它将等待新的持续时间。
解决方案
不,你不能!
正如错误告诉您WaitForSeconds
期望的那样float
。
您传入的float?
只是Nullable<float>
一个完全不同类型的同义词。
你想要的是time2.Value
. 在访问它之前,您应该检查time2.HasValue
而不是== null
(在内部==
使用HasValue
无论如何,因此只会更昂贵)。
现在在您的代码中有很多未解决的问题。
为什么在方法的顶部你要做的第一件事就是覆盖
time2 = 4;
无论如何,所以您完全忽略传入的任何值?我想您只想在没有传入任何值的情况下这样做。
然后稍后你检查
if(time2 > .02f && time2!=null)
{
yield return new WaitForSeconds(time2);
}
因此,在您甚至检查它是否具有您已经想将其与0.02
. 如果没有上述分配,您应该检查订单
if(time2.HasValue && time2.Value > 0.02f)
{
yield return new WaitForSeconds(time2.Value);
}
我想要这样,如果我在“Unhurt”之后不写任何东西,那么 time2 会浮动吗?将为空
您所说的称为可选参数,需要您实际分配一个默认值,并且宁愿看起来像
IEnumerator Unhurt(float? time2 = null)
但是,您不需要任何可为空的。为什么不简单地给它一个默认值并且根本不使用可空值
IEnumerator Unhurt(float time2 = 4f)
这一次,如果您没有明确传递任何值,它将始终具有默认值4
。
最后,一般来说,为了让你的生活更轻松,不要使用字符串版本StartCoroutine
!
而是有一个类似的方法
public void StartUnhurt(float time2 = 4f)
{
StartCoroutine (Unhurt(time2));
}
并像使用它一样
collision.gameObject.GetComponent<Player>().StartUnhurt();
或者
collision.gameObject.GetComponent<Player>().StartUnhurt(3.5f);
推荐阅读
- groovy - 根据另一组随机数据随机化数据以在 Jmeter 中作为请求正文发送
- android - 无法使用 setCornerRadius 方法圆圆可绘制的角
- c# - 当我使用 XPath 提取数据时,它在 messagebox.show 中没有给出任何响应
- soap - JBOSS 服务器上的 SOAP 示例
- arrays - Swift - dictionary with array - get reference to array
- javascript - 提取存储在字符串中的数据
- laravel - 如何获取语言环境(语言)的名称,而不仅仅是语言环境字符串,而是 LARAVEL 中该语言的名称?
- javascript - 如何通过 Java 脚本调用 Angular 组件
- c# - 多语言实体映射
- .net - Azure 应用程序网关返回随机 502 错误