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# 如何根据浮动的增加或减少使布尔值变为真或假_C#_Unity3d - Fatal编程技术网

C# 如何根据浮动的增加或减少使布尔值变为真或假

C# 如何根据浮动的增加或减少使布尔值变为真或假,c#,unity3d,C#,Unity3d,因此,我有两个布尔值“FacingRight”和“FacingLeft”,它们不是我想要的,我想到了一个更好的主意,但绝对不知道如何去做 如果游戏对象(玩家)的X位置值增加,我想使FacingRight=true和FacingLeft=false,这意味着当X值减少时,它向右移动,FacingRight=false和FacingLeft=true 任何帮助都将不胜感激 这是我当前的代码,如果有帮助的话 public float fireAnimDelay; Animator anim; pub

因此,我有两个布尔值“FacingRight”和“FacingLeft”,它们不是我想要的,我想到了一个更好的主意,但绝对不知道如何去做

如果游戏对象(玩家)的X位置值增加,我想使FacingRight=true和FacingLeft=false,这意味着当X值减少时,它向右移动,FacingRight=false和FacingLeft=true

任何帮助都将不胜感激

这是我当前的代码,如果有帮助的话

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) {
    //...
}