Unity绘制圆半径内随机点
程序员文章站
2022-05-22 13:09:08
...
Unity绘制圆半径内随机点<25/11/2017>
实现原理:先给随机的长度并取单位向量,然后旋转随机的角度,即可生成达成命题,绘制圆半径内随机点(这是博主帮人机试时突然闪现出的解决方案,哈哈哈!简直完美!!!老夫聊发少年狂,左牵黄右......)
实际效果如下:
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);//随机大小
}
}
}
再给你们欣赏一遍,哈哈哈: