• unity游戏开发中的随机算法


    随机相关内容 C#实现 Unity直接可用

    对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习unity的零基础小白,也有一些正在从事unity开发的技术大佬,欢迎你来交流学习。

    洗牌代码

    //Fisher-Yates shuffle

    static void Shuffle(T[] array)

    {

    int n = array.Length;

    for (int i = 0; i < n; i++)

    {

    int r = i + Random.Range(0, n - i);

    T t = array[r];

    array[r] = array[i];

    array[i] = t;

    }

    }

    带权重随机代码

    static public int GetRandomWeightedIndex(float[] weights)

    {

    // Get the total sum of all the weights.

    float weightSum = 0;

    for (int i = 0; i < weights.Length; ++i)

    {

    weightSum += weights[i];

    }

    // Step through all the possibilities, one by one, checking to see if each one is selected.

    int index = 0;

    int lastIndex = weights.Length - 1;

    while (index < lastIndex)

    {

    // Do a probability check with a likelihood of weights[index] / weightSum.

    if (Random.Range(0, weightSum) < weights[index])

    {

    return index;

    }

    // Remove the last item from the sum of total untested weights and try again.

    weightSum -= weights[index++];

    }

    // No other item was selected, so return very last index.

    return index;

    }

    伪随机C系数生成代码

    static public float CfromP(float p)

    {

    float Cupper = p;

    float Clower = 0f;

    float Cmid;

    float p1;

    float p2 = 1f;

    while (true)

    {

    Cmid = (Cupper + Clower) / 2f;

    p1 = PfromC(Cmid);

    if (Mathf.Abs(p1 - p2) <= 0f) break;

    if (p1 > p)

    {

    Cupper = Cmid;

    }

    else

    {

    Clower = Cmid;

    }

    p2 = p1;

    }

    return Cmid;

    }

    private float PfromC(float C)

    {

    float pProcOnN = 0f;

    float pProcByN = 0f;

    float sumNpProcOnN = 0f;

    int maxFails = Mathf.CeilToInt(1f / C);

    for (int N = 1; N <= maxFails; ++N)

    {

    pProcOnN = Mathf.Min(1f, N * C) * (1 - pProcByN);

    pProcByN += pProcOnN;

    sumNpProcOnN += N * pProcOnN;

    }

    return (1f / sumNpProcOnN);

    }

    关于如何使用这上述C系数

    每次触发概率从一个值开始递增,第N次的触发概率P(N) = C * N,比如25%的几率,C值大概为8.5%,运算流程如下:

    第一次触发眩晕概率为8.5%

    第二次为17%,以此类推递增

    如果触发眩晕成功,则概率重新从8.5%开始递增计算。

     

  • 相关阅读:
    linux 设置登录失败次数限制
    Infected Tree(树形dp)
    python:Möller–Trumbore射线三角面相交算法
    Java 精简字体 ttf 文件(精简后的字体文件只包含需要的文字字符)
    VsCode配置c/c++环境
    第一篇文章 mybatis 综述
    ffmpeg sdk 视频合成
    「大数据-2.0」安装Hadoop和部署HDFS集群
    原来用 MySQL 也可以做全文检索
    项目上线,git 给分支打 tag(git tag)
  • 原文地址:https://blog.csdn.net/voidinit/article/details/126718201