Unity 均匀球形物体生成以及环形物体生成

均匀球形物体生成以及环形物体生成


代码很简单没有难度,自己看一下应该就能明白。
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


    }
}

组件搭载:

在这里插入图片描述

最终效果:
环形

在这里插入图片描述

球形

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。
路长远兮,与君共勉。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maddie_Mo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值