C# 如何根据浮动的增加或减少使布尔值变为真或假
因此,我有两个布尔值“FacingRight”和“FacingLeft”,它们不是我想要的,我想到了一个更好的主意,但绝对不知道如何去做 如果游戏对象(玩家)的X位置值增加,我想使FacingRight=true和FacingLeft=false,这意味着当X值减少时,它向右移动,FacingRight=false和FacingLeft=true 任何帮助都将不胜感激 这是我当前的代码,如果有帮助的话C# 如何根据浮动的增加或减少使布尔值变为真或假,c#,unity3d,C#,Unity3d,因此,我有两个布尔值“FacingRight”和“FacingLeft”,它们不是我想要的,我想到了一个更好的主意,但绝对不知道如何去做 如果游戏对象(玩家)的X位置值增加,我想使FacingRight=true和FacingLeft=false,这意味着当X值减少时,它向右移动,FacingRight=false和FacingLeft=true 任何帮助都将不胜感激 这是我当前的代码,如果有帮助的话 public float fireAnimDelay; Animator anim; pub
public float fireAnimDelay;
Animator anim;
public bool FacingRight = false;
public bool FacingLeft = false;
// Use this for initialization
void Awake()
{
anim = GetComponent<Animator>();
anim.GetFloat("Speed");
}
// Update is called once per frame
void Update()
{
if (anim.GetFloat("Speed") >= 0.1f) // If speed is positive you are facing right
{
FacingRight = true;
Debug.Log("FacingRight");
}
if (anim.GetFloat("Speed") <= -0.1f) // if speed is negative you are facing left
{
FacingLeft = true;
}
if (anim.GetFloat("Speed") == 0.0f) // if speed is 0 you are idle
{
FacingRight = false;
FacingLeft = false;
}
if (Input.GetKey(KeyCode.Z) && FacingRight == true)
{
FacingLeft = false;
anim.SetBool("Firing", true);
anim.SetBool("FacingRight", true);
anim.SetBool("FacingLeft", false);
StartCoroutine(FireDelay());
}
if (Input.GetKey(KeyCode.Z) && FacingLeft == true)
{
FacingRight = true;
anim.SetBool("Firing", true);
anim.SetBool("FacingLeft", true);
anim.SetBool("FacingRight", false);
StartCoroutine(FireDelay());
}
}
IEnumerator FireDelay()
{
yield return new WaitForSeconds(fireAnimDelay);
anim.SetBool("Firing", false);
}
公共浮点数延迟;
动画师;
公共bool FacingRight=错误;
公共bool FacingLeft=false;
//用于初始化
无效唤醒()
{
anim=GetComponent();
动画GetFloat(“速度”);
}
//每帧调用一次更新
无效更新()
{
if(anim.GetFloat(“Speed”)>=0.1f)//如果速度为正,则朝向右侧
{
FacingRight=正确;
Debug.Log(“FacingRight”);
}
if(anim.GetFloat(“Speed”)实现这一点的有效方法是使用一个或多个事件。尽管您也可以使用其他技术实现这一点,但基于事件的编程为您提供了无价的优势,其中最简单的优势是,当您的值在不同的上下文中发生变化时,允许您运行不同的任务。(你可以通过谷歌阅读更多关于活动的信息)
以下代码提供了如何在代码中应用类似内容的示例:
public class FloatIncreasing
{
private float _Value;
public float Value {
get {
return _Value;
}
set {
ValueChangeEvent(this, _Value >= value);
_Value = value;
}
}
public Boolean HasIncreased { get; private set; }
public event EventHandler<Boolean> ValueChangeEvent;
public FloatIncreasing() {
this.ValueChangeEvent += OnValueChanged;
}
public virtual void OnValueChanged(Object sender, Boolean value) {
HasIncreased = value;
// You can add a more appropriate default behavior in here.
}
}
请注意,只要更改测试值
,就会触发相应的事件,允许您修改布尔值。您的代码中存在逻辑错误:
if (Input.GetKey(KeyCode.Z) && FacingRight == true) {
FacingLeft = false;
}
if (Input.GetKey(KeyCode.Z) && FacingLeft == true) {
FacingRight = true;
}
请注意,在一个实例中,如果面向右侧,则将Left设置为false,但在互补块中,将right设置为true
另外,anim.GetFloat(“速度”)>=0.1f
您应该检查
是否小于0,否则将检测不到0和0.1之间的值(或使用if…elseif…else)
更好的方法是将FacingLeft/Right变量减少为单个变量:
enum Facing { NONE, LEFT, RIGHT }
Facing playerFacing = Facing.NONE;
//...
if (Input.GetKey(KeyCode.Z) && playerFacing == Facing.RIGHT) {
//...
}
以及使用
Input.GetButton(“Fire”)
而不是硬编码的按键代码。这将允许您的玩家重新绑定按键(可能他们不喜欢您的WASD移动设置,更喜欢).我对C#和Unity还很陌生,所以这里有很多东西我没有得到,如果有人能为我进一步细分这一点,那将是非常棒的。同时我也将进行研究,希望能得到这个working@OmBiEaTeR简单地说,您需要的是一个事件。C#中的事件是类提供通知的一种方式o当某件有趣的事情(变化)发生时,该类客户发生在一个对象上
我只收到一个此脚本错误,我不确定它的意思,有人能给我解释一下它的意思吗。类型bool'不能用作泛型类型或方法System.EventHandler'中的类型参数
TEventArgs'。没有从
bool'到'System.EventArgs'的装箱转换
enum Facing { NONE, LEFT, RIGHT }
Facing playerFacing = Facing.NONE;
//...
if (Input.GetKey(KeyCode.Z) && playerFacing == Facing.RIGHT) {
//...
}