美文网首页Unity移动游戏从入门到腰疼
不就是写个随机数用用么,想坑死我呀!

不就是写个随机数用用么,想坑死我呀!

作者: 蓝色土豆 | 来源:发表于2018-06-09 22:54 被阅读11次

君莫笑,小编是个半道出家的和尚,基础什么的真的没学过。。。
今天在Unity里要实现获取圆心为Vector3.Zero半径为Ridus的球上的一个随机的点,并且点的xyz都不为零,emmm,随机数嘛,是不是感觉so ez。。。

int pointX = 0;
int pointY = 0;
int pointZ = 0;

int pointZMaxLength
    {
        get
        {
            return (int)Mathf.Sqrt((radius * radius) - (pointX * pointX));
        }
    }

Public Vector3 GetPoint()
{

  System.Random random = new System.Random();
  while(pointX == 0)
  {  
    pointX = random.Next(-radius, radius);
  }
  while(pointZ == 0 ||Mathf.Abs(pointZ) == pointZMaxLength)
  {
    pointZ = random.Next(-pointZMaxLength,pointZMaxLength);
  }
  
  pointY = (int)Mathf.Sqrt(radius * radius - (pointX * pointX + pointZ * pointZ));
  
}

然后我就。。。死机了
经多方调查,缘来。。。。random这个函数是有一个种子(seed)的,在seed不变的情况下,连续在同一范围取随机数。。。他会是一个定值。也就是说,如果我随机出pointX 为0 ,根据while的条件,程序会重新随机,然而这个重新随机出来的数必然还是0.。。。
如何破解呢?
在unity里,我们经常用GUID来取随机数的种子,直接上代码吧

int pointX = 0;
int pointY = 0;
int pointZ = 0;

int pointZMaxLength
{
    get
    {
        return (int)Mathf.Sqrt((radius * radius) - (pointX * pointX));
    }
}

Public Vector3 GetPoint()
{
   byte[] buffer = Guid.NewGuid().ToByteArray();
   int iSeed = BitConverter.ToInt32(buffer, 0);  

  System.Random random = new System.Random(iSeed );
  pointX = random.Next(-radius, radius);
  if(pointX == 0)
  {
  //这里用递归来重新取点,就是为了避开用同一个iSeed
    GetPoint();
    return;
  }
  pointZ = random.Next(-pointZMaxLength,pointZMaxLength);
  if(pointZ == 0 ||Mathf.Abs(pointZ) == pointZMaxLength)
  {
    GetPoint();
    return;
  }  
  pointY = (int)Mathf.Sqrt(radius * radius - (pointX * pointX + pointZ * pointZ));
  
}

实际上业务比这个要复杂一些,上面只是提取了坑我的那一部分写了个demo。。。
基础不牢坑死猿啊=。=

相关文章

  • 不就是写个随机数用用么,想坑死我呀!

    君莫笑,小编是个半道出家的和尚,基础什么的真的没学过。。。今天在Unity里要实现获取圆心为Vector3.Zer...

  • 生死劫

    欣赏我的老师来国刚的佳作 人生 不就是 由生到死 的距离么 生 必然要死 死 不会再生 劳我以生 息我以死 死 是...

  • 抓住「四月」的尾巴 · 理财篇

    4月的结束,迎来的不就是「五一」么? 如果只是五一,大家都知道呀,何必强调~所以,少玢在这,想强调的并不是这个。 ...

  • 我不就是想争口气么

    有时候支撑自己的就是那一口气,我就是不甘心,我就是不能说服自己享受失败,折磨到死我也要让自己心满意足地倒下。 不知...

  • Android Dialog中EditText无法弹出输入法解决

    记录一下昨晚遇到的坑点,本来是想写个悬浮工具的,可是在悬浮窗中的EditText死都弹不出输入法,各种百度Goog...

  • 我只是写个故事呀(⑤)

    两年的时间其实不长,可在小从这里,度日如年。每一天,小从往罐子里扔一个硬币。沉沉的两罐了,再过半年,青来就要回来。...

  • 我只是写个故事呀(①)

    在想什么呢? 想一个人 谁? 谢娜。 恩? 想知道刘烨结婚的那天,她有没有哭。 别闹,那是别人的事儿。 嗯,是的。...

  • 我只是写个故事呀(④)

    远方的青来什么都不知道。他发信息,写邮件,依旧探讨某些时下流行的话题,依旧述说一切在学校里如意不如意的事情,当然,...

  • 我只是写个故事呀(②)

    实习不过两个月时间,小从回到了大学,忙着恋爱,忙着毕业。偶尔回家,偶尔联系那个叫青来的孩子——小从一直把小她五岁的...

  • 我只是写个故事呀(③)

    暑假了,小从在小山村里过安详的日子。 什么都不想,包括那段失恋。虽然有时候心还会些许疼。可是,小从觉得自己就要忘记...

网友评论

    本文标题:不就是写个随机数用用么,想坑死我呀!

    本文链接:https://www.haomeiwen.com/subject/beuxeftx.html