当前位置:网站首页>【Unity】物体做圆周运动的几个思路
【Unity】物体做圆周运动的几个思路
2022-07-07 04:10:00 【煮粥侠_99】
第一种
没有数学基础的情况下,直接使用Unity提供的API:
只需要在Update里面放一行代码
this.transform.RotateAround(targetTrans.position, Vector3.forward, 180 * Time.deltaTime);
// targetTrans.position 是圆心的位置,这里我用一个空物体,可以可视化编辑圆心的位置。
// Vector3.forward是旋转轴,因为是2D所以我使用z轴。
// 180表示每秒钟旋转180度也就是半圈儿。
我们可以在2D场景里放置一个小球用于观测运动,在小球上附加此脚本。 再放一个空物体,设置为targetTrans对象。它表示圆心的位置。
小球会围绕圆心做匀速圆周运动。
第二种
思路:使用 Quaternion.AngleAxis()旋转向量的方法,想象一块表盘,秒针旋转360度,它的末端就会画出一个圆。
那么只需要具备“圆心”(位置)、“半径”(向量),两者相加,就可以得到圆上点的位置。
持续旋转这个“半径”,得到圆周运动。
Vector3 CenterPosition = Vector3.zero; //圆心的位置,我设定在(0,0)点
Vector3 r; //圆半径,也就是要旋转的向量。
private void Awake()
{
r = transform.position - CenterPosition; //圆心指向“我”的向量,就是半径
}
public void Update()
{
//以每秒180度的速度旋转“半径”向量,因为我做2D游戏,所以旋转轴是Z轴。
r = Quaternion.AngleAxis(180 * Time.deltaTime, Vector3.forward) * r;
//圆心位置 + 半径 = 圆上的点
transform.position = CenterPosition + r;
}
第三种
数学的方法,使用三角函数。可以找到很多参考,就不上代码了
使用的重要函数:
- Mathf.Sin () 获得一个角度的sin值,参数使用弧度
- Mathf.Cos() 同上,cos值。
- 可能会用到:Mathf.Deg2Rad 度转化为弧度,供以上两个函数使用
- 关于弧度
原理:在坐标系原点,将一个 单位向量 从X轴的正方向 向上旋转α度,得到单位向量在圆上的交叉点P(x,y),
三角函数告诉我们,cos (α) = x / 1 = x;sin (α) = y / 1 = y。 反过来 x = cos (α) , y = sin(α).
我们就可以得到 P 的坐标 ( cos(α) , sin (α) )
至此,由旋转的角度可以获得圆上点坐标。
具体实现可参考UNITY 围绕一个物体做圆周运动_Black-Coder的博客-CSDN博客_unity 圆周运动
一个联想
一个简单的做螺旋运动的思路:圆周运动时,半径匀速增长就可以了。
用第一种圆周运动的方法举例, 将圆心targetTrans每帧向着远离“小球”的方向移动。用transform.Translate()方法。远离的方向向量=圆心位置-小球位置。
边栏推荐
- [2022 CISCN]初赛 web题目复现
- BGP experiment (1)
- [2022 ACTF]web题目复现
- 聊聊异步编程的 7 种实现方式
- 深度学习花书+机器学习西瓜书电子版我找到了
- Outsourcing for four years, abandoned
- Tumor immunotherapy research prosci Lag3 antibody solution
- Make a bat file for cleaning system garbage
- Leetcode-543. Diameter of Binary Tree
- Interviewer: what development models do you know?
猜你喜欢
随机推荐
After 95, Alibaba P7 published the payroll: it's really fragrant to make up this
A concurrent rule verification implementation
Example of Pushlet using handle of Pushlet
KBU1510-ASEMI电源专用15A整流桥KBU1510
URP - shaders and materials - simple lit
普通测试年薪15w,测试开发年薪30w+,二者差距在哪?
JS small exercise ---- time sharing reminder and greeting, form password display hidden effect, text box focus event, closing advertisement
Leetcode-226. Invert Binary Tree
Role of virtual machine
Modify the jupyter notebook file path
Introduction to abnova's in vitro mRNA transcription workflow and capping method
JS plot flot application - simple curve
1141_ SiCp learning notes_ Functions abstracted as black boxes
Mutual conversion between InputStream, int, shot, long and byte arrays
leetcode:105. 从前序与中序遍历序列构造二叉树
Model application of time series analysis - stock price prediction
三、高质量编程与性能调优实战 青训营笔记
Kuboard can't send email and nail alarm problem is solved
外包幹了三年,廢了...
Bi she - college student part-time platform system based on SSM