我写了一个脚本,让敌人出现在玩家后面,每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();
}
}
}
答案 0 :(得分:5)
首先请注意,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;
}
好多了。
答案 1 :(得分:0)
**为UnityEngine更新了编辑
将bool Appeared
方法更改为:
bool Appeared()
{
bool appear = false;
int rand = Random.Range(1,6)
if (rand == 1)
{
appear = true;
} // else not needed
return appear;
}
答案 2 :(得分:0)
在Unity3D中获得1/5机会的简单且高效的方法是
if(Random.value < 1f/5f)
//do something
Random.value
正在返回一个浮动0 <= value <= 1