您的位置:首页 > 移动开发 > Unity3D

用unity制作向外扩散的圆弧

2020-03-28 19:06 2667 查看

创建向外扩散的圆弧

话不多说,先放上效果图

接下来阐述一下思路

  • 圆弧要向外扩散
  1. 半径线性增大
  2. 角度线性增大
  3. 算得新cube的坐标,在3d坐标系中,取两个坐标作为平面坐标即可。

半径和角度的线性增大很好处理,循环创建cube的同时给个恒定增量即可
而新cube的坐标需要通过计算
但实际上也很好想,就是计算出
1. cube在坐标系中x的增量
2. cube在坐标系中y的增量

其中,可以在平面坐标系中清晰地看到:

  • x的增量为半径乘上变化角度余弦值
  • y的增量为半径乘上变化角度正弦值

于是我们可以调用mathf类的Sin和Cos函数
但函数的参数,是弧度
弧度:弧长等于半径的弧,其所在的圆心角弧度为1;
==>即 周角(360度)为2PI弧度,平角(180度)为PI弧度
所以 将角度转换为弧度的表达式为:角度*PI/180

于是在csharp中我们可以通过如下代码

x=radius*Mathf.Cos(angle*Mathf.PI/180f);
z=radius*Mathf.Sin(angle*Mathf.PI/180f);

来求得x,z的增量(这里是以x,z为平面坐标系创建目标圆弧)

有了x和z的增量,给我们的中心物体挂载脚本,以中心物体为圆心,即可以在unity中实现对应的效果
由于我们只考虑用cube实现发散开的圆弧,于是这里y不做变化,以标准的unity左手坐标系为准,以下为“平躺在地面上的发散圆弧”

void Start()
{
//定义旋转角度和增长半径
float angle=10f;
float radius=1f;
CreateCircle(radius,angle);
}
void CreateCircle(float radius,float angle)
{   //循环创建cube
for (int i = 0; i < 1000; i++,angle+=10,radius+=1f)
{   //x为新cube的x,z为新cube的z 这里我以x-z为平面坐标系。
float x=transform.position.x+radius*Mathf.Cos(angle*Mathf.PI/180f);
float z=transform.position.z+radius*Mathf.Sin(angle*Mathf.PI/180f);
//创建cube并设置新cube的position
GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position=new Vector3(x,transform.position.y,z);

}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
@WolfeCheng 发布了4 篇原创文章 · 获赞 0 · 访问量 86 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: