一、Mathf 数学函数类
1、三角函数
介绍
Unity的所有三角函数都以弧度为单位,提供了如下函数:
-
Sin
、Cos
、Tan
:计算正弦、余弦和正切值。 -
Asin
、Acos
、Atan
:计算反正弦、反余弦和反正切值。 -
Atan2
:计算两点之间的角度,考虑了X轴与2D向量之间的角度。
应用
假设您需要计算一个物体在圆周路径上的移动,您可以使用Mathf.Sin
和Mathf.Cos
来计算其在X和Y轴上的位置。
float speed = 50.0f; // 速度
float time = Time.time; // 当前时间
// 计算圆周路径上的X和Y位置
float x = Mathf.Cos(time * speed) * 10.0f;
float y = Mathf.Sin(time * speed) * 10.0f;
transform.position = new Vector3(x, y, 0);
2、幂和平方根
介绍
Unity提供了常见的幂和平方根函数:
-
Pow
:计算幂次。 -
Sqrt
:计算平方根。 -
Exp
:计算指数。
此外,还有一些与二进制幂相关的函数,如ClosestPowerOfTwo
、NextPowerOfTwo
和IsPowerOfTwo
,在处理常见的二进制数据大小时非常有
应用
在调整游戏平衡时,幂函数可以用来调整游戏元素的属性,比如角色的生命值、攻击力等。
float level = 5; // 角色等级
float healthMultiplier = Mathf.Pow(1.2f, level); // 每升一级,生命值增加20%
float maxHealth = 100 * healthMultiplier; // 计算最大生命值
3、插值
介绍
Unity的插值函数允许您计算位于两个给定点之间某处的值,包括:
-
Lerp
:线性插值。 -
LerpAngle
:角度插值。 -
LerpUnclamped
:无限制的线性插值。 -
InverseLerp
:计算插值的逆过程。 -
MoveTowards
和MoveTowardsAngle
:向目标值移动,带有最大变化量限制。 -
SmoothDamp
、SmoothDampAngle
和SmoothStep
:平滑过渡。
应用
如果您想要平滑地过渡两个值,比如在两个颜色之间插值,您可以使用Mathf.Lerp
。
Color startColor = Color.red;
Color endColor = Color.blue;
float t = Time.time % 1; // 循环插值参数
// 在红色和蓝色之间插值
Color color = Color.Lerp(startColor, endColor, t);
GetComponent<Renderer>().material.color = color;
4、限制和重复值
介绍
这些函数在游戏或应用中通常很有用,当您需要将值限制在某个范围内或在某个范围内重复时:
-
Max
和Min
:计算最大值和最小值。 -
Repeat
和PingPong
:值的重复和往返。 -
Clamp
和Clamp01
:将值限制在一定范围内。 -
Ceil
和Floor
:向上取整和向下取整。
应用
如果您需要将一个值限制在0到1之间,可以使用Mathf.Clamp01
。
float value = -0.5f;
// 将值限制在0到1之间
value = Mathf.Clamp01(value);
Debug.Log("Clamped value: " + value);
如果您需要重复一个值,使其在0到1之间循环,可以使用Mathf.Repeat
。
float value = 5.5f;
// 重复值,使其在0到1之间循环
value = Mathf.Repeat(value, 1);
Debug.Log("Repeated value: " + value);
2、Random生成随机数类
Random
类在 Unity 中用于生成随机数,在游戏开发中广泛应用于各种需要随机性的场景,如随机生成敌人位置、掉落物品、随机事件触发等
用法
Random
类提供了多种生成随机数的方法,以下是一些常用的方法:
-
Random.value 返回一个在0(包含)到1(不包含)之间的随机浮点数。
-
Random.Range(min, max) 返回一个在指定的最小值(包含)和最大值(包含)之间的随机整数。
-
Random.Range(min, max) 返回一个在指定的最小值(包含)和最大值(不包含)之间的随机浮点数。
-
Random.onUnitSphere 返回一个在单位球面上的随机点。
-
Random.insideUnitSphere 返回一个在单位球体内部的随机点。
-
Random.onUnitCircle 返回一个在单位圆上的随机点。
-
Random.ColorHSV 返回一个在HSV颜色空间中的随机颜色。
应用场景
-
生成随机位置
在游戏世界中生成敌人、道具或其他对象的随机位置。
Vector3 randomPosition = Random.insideUnitSphere * 10 + new Vector3(0, 0, 10);
Instantiate(enemyPrefab, randomPosition, Quaternion.identity);
-
生成随机速度
为对象生成随机速度或方向。
float speed = Random.Range(5f, 10f);
Vector3 direction = Random.onUnitSphere;
rigidbody.velocity = direction * speed;
-
生成随机颜色
为对象生成随机颜色,如敌人、粒子效果等。
Color randomColor = Random.ColorHSV(0f, 1f, 1f, 1f);
GetComponent<Renderer>().material.color = randomColor;
-
生成随机事件
在游戏中生成随机事件,如随机任务、随机奖励等。
int randomEvent = Random.Range(1, 5);
switch(randomEvent)
{
case 1:
// 事件1
break;
case 2:
// 事件2
break;
// 其他事件...
}
-
生成随机音乐
在游戏中随机播放音乐或音效。
int musicIndex = Random.Range(0, musicClips.Length);
audioSource.clip = musicClips[musicIndex];
audioSource.Play();
-
生成随机图案
在游戏中生成随机图案或纹理。
int patternIndex = Random.Range(0, patterns.Length);
GetComponent<Renderer>().material.mainTexture = patterns[patternIndex];
-
生成随机AI行为
为AI生成随机行为,如随机巡逻路径、随机攻击时机等。
int aiAction = Random.Range(0, 3);
if(aiAction == 0)
{
// 行为1
}
else if(aiAction == 1)
{
// 行为2
}
else
{
// 行为3
}
通过使用Random
类,开发者可以在Unity中轻松实现各种随机化的游戏机制,增加游戏的可玩性和趣味性。
三、OnMouseEventFunction 鼠标回调事件
介绍
-
OnMouseDown()
-
用法:当用户在游戏视窗内点击鼠标左键时调用。
-
应用场景:可以用来实现点击选中对象、点击触发事件、点击开始游戏等。
-
-
OnMouseUp()
-
用法:当用户释放鼠标左键时调用。
-
应用场景:可以用来结束拖拽操作、释放投射物等。
-
-
OnMouseEnter()
-
用法:当鼠标指针进入游戏对象的碰撞区域时调用。
-
应用场景:可以用来实现鼠标悬停提示、高亮显示对象等。
-
-
OnMouseOver()
-
用法:当鼠标指针在游戏对象的碰撞区域内移动时调用。
-
应用场景:与
OnMouseEnter()
类似,但更适合连续的鼠标悬停效果。
-
-
OnMouseExit()
-
用法:当鼠标指针离开游戏对象的碰撞区域时调用。
-
应用场景:可以用来取消鼠标悬停提示、取消高亮显示对象等。
-
-
OnMouseDrag()
-
用法:当用户点击并拖拽鼠标时调用。
-
应用场景:可以用来实现拖拽操作,如移动UI元素、拖拽游戏对象等。
-
应用
using UnityEngine;
public class ClickDragExample : MonoBehaviour
{
private bool isDragging = false;
void OnMouseDown()
{
// 鼠标左键按下时调用
Debug.Log("Mouse Down");
isDragging = true;
}
void OnMouseUp()
{
// 鼠标左键释放时调用
Debug.Log("Mouse Up");
isDragging = false;
}
void OnMouseDrag()
{
// 鼠标拖拽时调用
if (isDragging)
{
Debug.Log("Dragging");
// 这里可以添加拖拽逻辑,比如移动游戏对象
}
}
}
鼠标事件在游戏开发中有广泛的应用场景,包括但不限于:
-
用户界面交互:如按钮点击、滑动条拖拽、列表项选择等。
-
游戏控制:如点击射击、点击移动、点击选择技能等。
-
编辑器扩展:在Unity编辑器中创建自定义工具或扩展时,可能需要响应鼠标事件来实现特定的功能。
-
虚拟现实和增强现实:在VR或AR应用中,鼠标事件可以用来模拟头部或手部的交互。