敌人出现在玩家几率1比5后面 - c#

我编写了一个脚本,使敌人每3分钟出现五分之一的机会出现在玩家身后,出于测试目的,我已经将五分之一的机会更改为千分之一的机会,但是我不确定是否有用。

我知道如何将敌人放置在玩家后面,但不会有1比5的机会。

我尝试使用1到5之间的随机数进行尝试。如果随机数等于1,则必须生成敌人,否则就不会生成。

这是代码:

using UnityEngine;
using System.Collections;
public class MainEnemy : MonoBehaviour
{
    public GameObject Main;
    public GameObject Holder;
    public Transform player;
    public Transform FPSController;
    bool wantPosition;
    bool appear;
    float timer;
    Vector3 temp;
    // Use this for initialization

    void Start()
    {
        wantPosition = true;
        appear = false;
        temp = new Vector3(0, 0, 0);
        timer = 20;// 180;
    }

    // Update is called once per frame
    void Update()
    {
        Appear();
    }

    Vector3 GetPosition()
    {
        Debug.Log("Hij doet het getposition");
        float px = player.transform.position.x;
        float pz = player.transform.position.z;
        //
        float angle2 = Mathf.Cos(Camera.main.transform.eulerAngles.y) + 180;
        //
        float distance = 20;
        float distancex = Mathf.Cos(angle2 + 180) * distance;
        float distancez = Mathf.Sin(angle2 + 180) * distance;
        // Tell distanceen bij coordinaten op
        temp = new Vector3(distancex, -3, distancez);
        return temp;
    }

    void SetFalse()
    {
        if (timer < 1)
        {
            timer = 10;// 180; // na 3 minuten weer kijken of hij hem laat zien
        }
        Main.SetActive(false);
    }

    void Position()
    {
        if (wantPosition)
        {
            temp = GetPosition();
            Holder.transform.position = player.position + temp;
            Main.SetActive(true);
            if (timer < 0)
            {
                timer = 10; // kort zichtbaar
            }
            wantPosition = false;
        }
    }

    bool Appeared()
    {
        bool appear = false;
        int rand = Random.Range(1, 1);
        if (rand == 1)
        {
            appear = true;
        }
        else
        {
            appear = false;
        }
        return appear;
    }

    void Appear()
    {
        bool appear = false;
        if (timer <= 0)
        {
            appear = Appeared();
        }
        else
        {
            timer -= Time.deltaTime;
            if (timer < 10)
            {
                Debug.Log(timer);
            }
        }
        if (appear == true)
        {
            Position();
        }
        else
        {
            SetFalse();
        }
    }
}

参考方案

首先请注意,Random.Range返回的数字大于或等于min,但小于(但不等于)max。如果在特殊情况下min == max,则将返回该值。

其次,您的Appeared函数有点冗长。假设我们将其重新设置为五分之一的机会,您将获得以下信息:

bool Appeared()
{
    bool appear = false;
    int rand = Random.Range(1, 6);
    if (rand == 1)
    {
        appear = true;
    }
    else
    {
        appear = false;
    }
    return appear;
}

首先让我指出那句话:

if(x)
    y = true
else
    y = false

其中x是布尔条件,与说完全相同

y = x

因此,也许您可​​以将其更改为:

bool Appeared()
{
    bool appear = false;
    int rand = Random.Range(1, 6);
    appear = rand == 1;
    return appear;
}

现在来看,为什么一开始就将appear设置为false?该值永远不会被使用。也许这:

bool Appeared()
{
    int rand = Random.Range(1, 6);
    bool appear = rand == 1;
    return appear;
}

嗯,现在我们只是分配一个变量,然后在下一行返回它。好的,也许这样:

bool Appeared()
{
    int rand = Random.Range(1, 6);
    return rand == 1;
}

是的,是的这看起来很熟悉。现在,再次,我们几乎只是分配一个变量,然后在下一行返回它。现在我们真的需要那个rand变量吗?可能不是。那么呢:

bool Appeared()
{
    return Random.Range(1, 6) == 1;
}

好多了。

3D Shadow的实现思路 - java

假设您的眼睛在对象A的表面点P1上,并且有目标对象B,并且在对象B后面有点光源。 问题:是对的,如果我看着光源,如果由于物体B而看不到光,则说“我在阴影中”。然后,我将对象A的该点标记为“B在A上的阴影点之一”。如果这是真的,那么我们可以在A的表面上构建一个“阴影几何”(黑色)对象,然后由于光,B,A等的运动而不断对其进行更改吗?实时?假设一个球体(A)具有…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4