Unity 基础 之 一些物体形态生成方式整理(圆圈形式/圆圈螺旋形式/矩形区域/环形区域/球形区域等(随机)生成)

Unity 基础 之 一些物体形态生成方式整理(圆圈形式/圆圈螺旋形式/矩形区域/环形区域/球形区域等(随机)生成)

 

目录

Unity 基础 之 一些物体形态生成方式整理(圆圈形式/圆圈螺旋形式/矩形区域/环形区域/球形区域等(随机)生成)

一、简单介绍

二、效果预览

三、关键代码


 

一、简单介绍

Unity中的一些基础知识点。

本节简单整理了一些物体形态生成方法的整理,以方便学习使用,后期也会根据需要更新,如果你有新的方式也可以留言,多谢。

 

二、效果预览

 

三、关键代码


using UnityEngine;

namespace XANStudy { 

	public class TestRandomInstantiate : MonoBehaviour
	{
		// Start is called before the first frame update
		void Start()
		{
			Test();
		}


		void Test() {

			// 圆圈生成
            for (int angle = 0; angle < 360; angle+=30)
            {
				GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
				obj.GetComponent<Renderer>().material.color = Color.black;
				//设置物体的位置Vector3三个参数分别代表x,y,z的坐标数  
				obj.transform.position = CirclePos(5, angle, Vector3.up * 10);
			}

			// 螺旋圆圈生成 原理 半径增加
			float angleSpin = 0;
			float radiuSpin = 2;
			for (int i = 0; i < 50; i++, angleSpin += 20, radiuSpin += 0.1f)
			{
				GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
				obj.GetComponent<Renderer>().material.color = Color.cyan;
				//设置物体的位置Vector3三个参数分别代表x,y,z的坐标数  
				obj.transform.position = CirclePos(radiuSpin, angleSpin, Vector3.up * 5);
			}

			// 矩形随机生成
			for (int i = 0; i < 1000; i++)
            {
				GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
				obj.GetComponent<Renderer>().material.color = Color.white;
				//设置物体的位置Vector3三个参数分别代表x,y,z的坐标数  
				obj.transform.position = RandomPos(-5, 5, -5, 5, -5, 5, Vector3.one * 10)
;
			}

			// 环形随机生成
			for (int i = 0; i < 1000; i++)
			{
				GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
				obj.GetComponent<Renderer>().material.color = Color.red;
				//设置物体的位置Vector3三个参数分别代表x,y,z的坐标数  
				obj.transform.position = RandomCirclePos(10,2, Vector3.zero)
;
			}

			// 球形随机生成
			for (int i = 0; i < 1000; i++)
			{
				GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Capsule);
				obj.GetComponent<Renderer>().material.color = Color.yellow;
				//设置物体的位置Vector3三个参数分别代表x,y,z的坐标数  
				obj.transform.position = RandomSpherePos(10, 2, Vector3.one * -10)
;
			}

		}

		/// <summary>
		/// 圆圈点位
		/// </summary>
		/// <param name="radius">半径</param>
		/// <param name="angle">角度</param>
		/// <param name="centerPos">基于点位</param>
		/// <returns></returns>
		Vector3 CirclePos(float radius, float angle, Vector3 centerPos)
		{
			// x = 原点x + 半径 * 邻边除以斜边的比例,   邻边除以斜边的比例 = cos(弧度) , 弧度 = 角度 *3.14f / 180f;   
			float x = radius * Mathf.Cos(angle * 3.14f / 180f);
			float y = radius * Mathf.Sin(angle * 3.14f / 180f);
			return new Vector3(x, 0, y) + centerPos;
			
		}

		/// <summary>
		/// 随机矩形位置
		/// </summary>
		/// <param name="xMin"></param>
		/// <param name="xMax"></param>
		/// <param name="yMin"></param>
		/// <param name="yMax"></param>
		/// <param name="zMin"></param>
		/// <param name="zMax"></param>
		/// <param name="centerPos">基于位置</param>
		/// <returns></returns>
		Vector3 RandomPos(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax, Vector3 centerPos)
		{

			return new Vector3(Random.Range(xMin, xMax), Random.Range(yMin, yMax), Random.Range(zMin, zMax))
				+ centerPos;
		}

		/// <summary>
		/// 环形随机位置
		/// </summary>
		/// <param name="innerRadius">内径</param>
		/// <param name="toOutderadd">向外扩展的宽度</param>
		/// <param name="centerPos">中心位置</param>
		/// <returns></returns>
		Vector3 RandomCirclePos(float innerRadius, float toOutderadd,  Vector3 centerPos)
		{
			Vector2 p = Random.insideUnitCircle * toOutderadd;
			Vector2 pos = p.normalized * (innerRadius + p.magnitude);
			return new Vector3(pos.x, 0, pos.y) + centerPos;

		}

		/// <summary>
		/// 球形随机位置
		/// </summary>
		/// <param name="innerRadius">内径</param>
		/// <param name="toOutderadd">向外扩展的宽度</param>
		/// <param name="centerPos">中心位置</param>
		/// <returns></returns>
		Vector3 RandomSpherePos(float innerRadius, float toOutderadd, Vector3 centerPos)
		{
			Vector3 p = Random.insideUnitSphere * toOutderadd;
			Vector3 pos = p.normalized * (innerRadius + p.magnitude);
			return pos + centerPos;

		}
	}
}

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仙魁XAN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值