【unity进阶篇】弧度、角度和三角函数(Mathf),并实现类似蛇的运动
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了
C#篇、unity通用篇、unity3D篇、unity2D篇
。
- 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
- 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
- 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
- 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。
这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。
文章目录
- 一、角度与弧度
- 1、定义
- 2、转换关系
- 3、Unity 中的转换
- 二、数学中的三角函数
- 1、正弦函数 (sin)
- 2、余弦函数 (cos)
- 3、正切函数 (tan)
- 三、Unity 中的三角函数
- 1、`Mathf` 类
- 2、反三角函数
- 3、实际应用案例:蛇的运动
- 专栏推荐
- 完结
一、角度与弧度
1、定义
- 角度:用度(°)来表示的角度单位。一个圆的完整旋转是 360 度。
- 弧度:用弧长与半径的比例来表示的角度单位。一个圆的完整旋转是 2π 弧度。
2、转换关系
- 从弧度到角度:
角度 = 弧度 × 180 / π ≈ 弧度 × 57.3
- 从角度到弧度:
弧度 = 角度 × π / 180 ≈ 角度 × 0.01745
3、Unity 中的转换
57.3和0.01745这个值我们并不需要特地去记,因为Unity 提供了静态常量 Mathf.Rad2Deg
和 Mathf.Deg2Rad
来进行角度和弧度之间的转换。
// 弧度转角度
float rad = 1;
float angle = rad * Mathf.Rad2Deg;
print(angle);
// 角度转弧度
angle = 1;
rad = angle * Mathf.Deg2Rad;
print(rad);
二、数学中的三角函数
这其实就是我们数学的知识,这里回顾一下
1、正弦函数 (sin)
sin(β) = 对边 / 斜边
正弦函数曲线
2、余弦函数 (cos)
cos(β) = 邻边 / 斜边
余弦函数曲线
3、正切函数 (tan)
tan(β) = cos(β) / sin(β) = 对边 / 邻边
三、Unity 中的三角函数
1、Mathf
类
Unity 的 Mathf
类提供了多种三角函数方法,如 Mathf.Sin
, Mathf.Cos
, Mathf.Tan
等。这些方法接受弧度作为参数。
注意
:Mathfr 中的三角函数相关函数,传入的参数需要是弧度值
print(Mathf.Sin(30 * Mathf.Deg2Rad)); // 输出约 0.5
print(Mathf.Cos(60 * Mathf.Deg2Rad)); // 输出约 0.5
print(Mathf.Tan(45 * Mathf.Deg2Rad)); // 输出约 1
2、反三角函数
反三角函数用于计算给定的正弦或余弦值对应的角(以弧度表示)。
作用:通过反三角函数计算正弦值或余弦值对应的弧度值。
- 反正弦函数 (Asin):计算给定的正弦值对应的角。
- 反余弦函数 (Acos):计算给定的余弦值对应的角。
注意:反三角函数得到的结果是正弦或者余弦值对应的弧度
float rad = Mathf.Asin(0.5f);
print(rad * Mathf.Rad2Deg); // 输出约 30 度
rad = Mathf.Acos(0.5f);
print(rad * Mathf.Rad2Deg); // 输出约 60 度
3、实际应用案例:蛇的运动
假设我们想要实现一条蛇在场景中做波浪形运动,可以使用正弦函数来控制蛇左右摆动。
public class SnakeMovement : MonoBehaviour
{
// 面朝向移动速度
public float moveSpeed = 5;
// 左右曲线移动变化的速度
public float changeSpeed = 2;
// 左右曲线移动距离控制
public float changeSize = 0.5f;
private float time = 0;
void Update()
{
// 前进移动
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
// 左右曲线移动
time += Time.deltaTime * changeSpeed;
transform.Translate(Vector3.right * changeSize * Mathf.Sin(time) * Time.deltaTime);
}
}
其实也可以做比如做船在水面上下来回波动的效果
专栏推荐
地址 |
---|
【零基础入门unity游戏开发——C#篇】 |
【零基础入门unity游戏开发——unity通用篇】 |
【零基础入门unity游戏开发——unity3D篇】 |
【零基础入门unity游戏开发——unity2D篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!