均匀球形物体生成以及环形物体生成
代码很简单没有难度,自己看一下应该就能明白。
OK 老规矩,直接上代码:
中心区域判定
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 球形绘制
/// </summary>
public class DrawingBall_ZH : MonoBehaviour
{
[Header("角度")]
public int _Angle;
[Header("半径")]
public float _Radius;
[Header("生成数组")]
public List<Transform> _GeneratePre;
[Header("球形半径")]
public int _SphereRadius;
[Header("预制体")]
public Transform _Prefab;
[Header("预制体生成数量")]
public int _CubeNumber;
//角度数列
private float _AngleNumber = 0;
void Start()
{
StartCoroutine(GenerateCube());
}
/// <summary>
/// 球形绘制
/// </summary>
/// <returns></returns>
private IEnumerator GenerateCube()
{
#region //环形绘制
//for (int j = 0; j < 361; j++)
//{
// _AngleNumber += _Angle;
// _GeneratePre.Add(Instantiate(_Prefab, new Vector3(transform.position.x + _Radius * Mathf.Cos(_AngleNumber * Mathf.PI / 180),
// transform.position.y,
// transform.position.z + (_Radius * Mathf.Sin(_AngleNumber * Mathf.PI / 180))), Quaternion.identity, transform));
// if (_AngleNumber > 360)
// {
// yield return 0;
// }
//}
#endregion
//返回平方根
float _Inc = Mathf.PI * (3.0f - Mathf.Sqrt(5.0f));
//数值精度
float _Off = 2.0f / _CubeNumber;
float _Yy;
float _R;
float _Phi;
//生成数量
for (int i = 0; i < _CubeNumber; i++)
{
_Yy = i * _Off + (_Off / 2.0f) - 1.0f;
_R = Mathf.Sqrt(1.0f - _Yy * _Yy);
_Phi = i * _Inc;
Vector3 _PrefabPos = new Vector3(Mathf.Cos(_Phi) * _R * _SphereRadius, _Yy * _SphereRadius, Mathf.Sin(_Phi) * _R * _SphereRadius);
//生成
_GeneratePre.Add(Instantiate(_Prefab, _PrefabPos, Quaternion.identity,transform));
yield return 0;//new WaitForSeconds(0.1f)
}
}
private void OnDrawGizmos()
{
//Gizmos.DrawWireSphere(transform.position, _Radius);
//Gizmos.DrawLine(transform.position, new Vector3(_Radius * Mathf.Cos(_Angle), transform.position.y, _Radius * Mathf.Sin(_Angle)));
//for (int i = 0; i < 361; i++)
//{
// _AngleNumber += _Angle;
// Gizmos.DrawLine(transform.position, new Vector3(transform.position.x + _Radius * Mathf.Cos(_AngleNumber * Mathf.PI / 180), transform.position.y, transform.position.z + _Radius * Mathf.Sin(_AngleNumber * Mathf.PI / 180)));
// if (_AngleNumber > 360)
// {
// return;
// }
//}
#region //圆柱绘制
//for (int i = 0; i < 4; i++)
//{
//for (int j = 0; j < 361; j++)
//{
// _AngleNumber += _Angle;
// Gizmos.DrawLine(transform.position, new Vector3(transform.position.x + _Radius * Mathf.Cos(_AngleNumber * Mathf.PI / 180),
// transform.position.y + _Radius * Mathf.Sin(_A * Mathf.PI / 180),
// transform.position.z + (_Radius * Mathf.Sin(_AngleNumber * Mathf.PI / 180) - _Radius * Mathf.Sin(_A * Mathf.PI / 180))));
// if (_AngleNumber > 360)
// {
// _AngleNumber = 0;
// //return;
// }
//}
//}
//Gizmos.color = Color.yellow;
//Gizmos.DrawSphere(transform.position, _SphereRadius);
#endregion
}
}
组件搭载:
最终效果:
环形
球形
暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。
路长远兮,与君共勉。