2

Mathf.FloorToIntのスクリプト リファレンス ドキュメントは次のとおりです。ご覧のとおり、-0.5 を切り捨てて -1 にする必要があります。何らかの理由で、私の計算で使用すると 0 として返されるようです。

非常によく似た方法で機能するが、異なる出力を与える同じ関数の 2 つのバージョンがあります。私のコードは、3 から 18 までの整数のみをこれらの関数に送信します。

このバージョンは、Mathf.CielToInt を使用しているかのように動作します (statRoll = 9 の場合は 0 を返します)。

    public int getBonus(int statRoll)
{
    int result = Mathf.FloorToInt((statRoll - 10) / 2);
    return result;
}

これは動作するバージョンです (statRoll = 9 の場合は -1 を返します):

    public int getBonus(int statRoll)
{
    float initial = statRoll - 10;
    float divided = initial / 2;
    int result = Mathf.FloorToInt(divided);
    return result;
}
4

1 に答える 1

4

整数除算でビットを取得しています。statRollとは両方とも10intであり、initial実際にはint.

最初のコードは次と同等です

public int getBonus(int statRoll)
{
    int initial = statRoll - 10;
    int devisor = 2;
    int divided = initial / devisor;
    float castDevided = (float)divided
    int result = Mathf.FloorToInt(castDevided);
    return result;
}

2 つの int がある場合、結果も int でなければならないため-1 / 2、これは not と評価されます。これを修正する方法は、2 つの値のいずれかを0-0.5float

public int getBonus(int statRoll)
{
    int result = Mathf.FloorToInt((statRoll - 10) / 2f); //adding f after a number makes it a float
    return result;
}

intこれにより、 aと a の間の除算が行われ、floatその結果が float になります。同様のコードは次のようになります

public int getBonus(int statRoll)
{
    int initial = statRoll - 10;
    float devisor = 2f;
    float divided = initial / devisor ;
    int result = Mathf.FloorToInt(divided);
    return result;
}
于 2016-04-08T23:23:54.593 に答える