UnityAPI——Math数学函数类、Random生成随机数类、OnMouseEventFunction 鼠标回调事件

一、Mathf 数学函数类

1、三角函数

介绍

Unity的所有三角函数都以弧度为单位,提供了如下函数:

  • SinCosTan:计算正弦、余弦和正切值。

  • AsinAcosAtan:计算反正弦、反余弦和反正切值。

  • Atan2:计算两点之间的角度,考虑了X轴与2D向量之间的角度。

应用

假设您需要计算一个物体在圆周路径上的移动,您可以使用Mathf.SinMathf.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:计算指数。

此外,还有一些与二进制幂相关的函数,如ClosestPowerOfTwoNextPowerOfTwoIsPowerOfTwo,在处理常见的二进制数据大小时非常有

应用

在调整游戏平衡时,幂函数可以用来调整游戏元素的属性,比如角色的生命值、攻击力等。

float level = 5; // 角色等级
float healthMultiplier = Mathf.Pow(1.2f, level); // 每升一级,生命值增加20%
float maxHealth = 100 * healthMultiplier; // 计算最大生命值

3、插值

介绍

Unity的插值函数允许您计算位于两个给定点之间某处的值,包括:

  • Lerp:线性插值。

  • LerpAngle:角度插值。

  • LerpUnclamped:无限制的线性插值。

  • InverseLerp:计算插值的逆过程。

  • MoveTowardsMoveTowardsAngle:向目标值移动,带有最大变化量限制。

  • SmoothDampSmoothDampAngleSmoothStep:平滑过渡。

应用

如果您想要平滑地过渡两个值,比如在两个颜色之间插值,您可以使用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、限制和重复值

介绍

这些函数在游戏或应用中通常很有用,当您需要将值限制在某个范围内或在某个范围内重复时:

  • MaxMin:计算最大值和最小值。

  • RepeatPingPong:值的重复和往返。

  • ClampClamp01:将值限制在一定范围内。

  • CeilFloor:向上取整和向下取整。

应用

如果您需要将一个值限制在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类提供了多种生成随机数的方法,以下是一些常用的方法:

  1. Random.value 返回一个在0(包含)到1(不包含)之间的随机浮点数。

  2. Random.Range(min, max) 返回一个在指定的最小值(包含)和最大值(包含)之间的随机整数。

  3. Random.Range(min, max) 返回一个在指定的最小值(包含)和最大值(不包含)之间的随机浮点数。

  4. Random.onUnitSphere 返回一个在单位球面上的随机点。

  5. Random.insideUnitSphere 返回一个在单位球体内部的随机点。

  6. Random.onUnitCircle 返回一个在单位圆上的随机点。

  7. Random.ColorHSV 返回一个在HSV颜色空间中的随机颜色。

应用场景

  1. 生成随机位置

    在游戏世界中生成敌人、道具或其他对象的随机位置。
Vector3 randomPosition = Random.insideUnitSphere * 10 + new Vector3(0, 0, 10);
Instantiate(enemyPrefab, randomPosition, Quaternion.identity);
  1. 生成随机速度

    为对象生成随机速度或方向。
float speed = Random.Range(5f, 10f);
Vector3 direction = Random.onUnitSphere;
rigidbody.velocity = direction * speed;
  1. 生成随机颜色

    为对象生成随机颜色,如敌人、粒子效果等。
Color randomColor = Random.ColorHSV(0f, 1f, 1f, 1f);
GetComponent<Renderer>().material.color = randomColor;
  1. 生成随机事件

    在游戏中生成随机事件,如随机任务、随机奖励等。
int randomEvent = Random.Range(1, 5);
switch(randomEvent)
{
    case 1:
        // 事件1
        break;
    case 2:
        // 事件2
        break;
    // 其他事件...
}
  1. 生成随机音乐

    在游戏中随机播放音乐或音效。
int musicIndex = Random.Range(0, musicClips.Length);
audioSource.clip = musicClips[musicIndex];
audioSource.Play();
  1. 生成随机图案

    在游戏中生成随机图案或纹理。
int patternIndex = Random.Range(0, patterns.Length);
GetComponent<Renderer>().material.mainTexture = patterns[patternIndex];
  1. 生成随机AI行为

    为AI生成随机行为,如随机巡逻路径、随机攻击时机等。
int aiAction = Random.Range(0, 3);
if(aiAction == 0)
{
    // 行为1
}
else if(aiAction == 1)
{
    // 行为2
}
else
{
    // 行为3
}

通过使用Random类,开发者可以在Unity中轻松实现各种随机化的游戏机制,增加游戏的可玩性和趣味性。

三、OnMouseEventFunction 鼠标回调事件

介绍

  1. OnMouseDown()

    • 用法:当用户在游戏视窗内点击鼠标左键时调用。

    • 应用场景:可以用来实现点击选中对象、点击触发事件、点击开始游戏等。

  2. OnMouseUp()

    • 用法:当用户释放鼠标左键时调用。

    • 应用场景:可以用来结束拖拽操作、释放投射物等。

  3. OnMouseEnter()

    • 用法:当鼠标指针进入游戏对象的碰撞区域时调用。

    • 应用场景:可以用来实现鼠标悬停提示、高亮显示对象等。

  4. OnMouseOver()

    • 用法:当鼠标指针在游戏对象的碰撞区域内移动时调用。

    • 应用场景:与OnMouseEnter()类似,但更适合连续的鼠标悬停效果。

  5. OnMouseExit()

    • 用法:当鼠标指针离开游戏对象的碰撞区域时调用。

    • 应用场景:可以用来取消鼠标悬停提示、取消高亮显示对象等。

  6. 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应用中,鼠标事件可以用来模拟头部或手部的交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值