欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity绘制圆半径内随机点

程序员文章站 2022-05-22 13:09:08
...

Unity绘制圆半径内随机点<25/11/2017>

实现原理:先给随机的长度并取单位向量,然后旋转随机的角度,即可生成达成命题,绘制圆半径内随机点(这是博主帮人机试时突然闪现出的解决方案,哈哈哈!简直完美!!!老夫聊发少年狂,左牵黄右......)

实际效果如下:

Unity绘制圆半径内随机点

CodingLikeAGod脚本代码如下:(挂相机,创建一个Sphere放原点作为spherePrefab和center中心点)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CodingLikeAGod : MonoBehaviour
{
    public GameObject spherePrefab;
    public GameObject center;
    float insideRadius;
    float radius;

    void Update()
    {
        transform.RotateAround(center.transform.position, transform.up, 90 * Time.deltaTime);//相机(0,0,-10)绕着原点center每秒转90度(卫星模式)
        if (Input.GetKeyDown(KeyCode.Space))
        {
            CreateSphere();
        }
    }

    void CreateSphere()//核心原理:随机的长度转随机的角度,然后简直完美!!!!!!!!!
    {
        insideRadius = 5f;
        radius = 10f;
        for (int i = 0; i < 100; i++)
        {
            Vector2 p = Random.insideUnitCircle * radius;//将位置设置为一个半径为radius中心点在原点的圆圈内的某个点X.
            Vector2 pos = p.normalized * (insideRadius + p.magnitude);//某个点X的单位向量乘以随机出来的长度(这个随机点是以圆心为中心半径5之外,10之内的点)
            Vector3 pos2 = new Vector3(pos.x, pos.y, 0);
            GameObject g = Instantiate(spherePrefab, center.transform.position, Quaternion.identity);//以center位置为中心先生成
            g.transform.position = pos2;//随机位置
            g.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));//随机颜色
            g.transform.rotation = Quaternion.Euler(new Vector3(0, 0, Random.Range(-180, 180)));//随机角度(欧拉角转四元数公式,这个公式非常受用!!!!!)
            float f = Random.Range(0, 1f);
            g.transform.localScale = new Vector3(f, f, f);//随机大小
        }

    }
}
再给你们欣赏一遍,哈哈哈:

Unity绘制圆半径内随机点