【Unity3D】 Mathy(常用数学运算,C#)

在unity游戏开发中,我们常常需要用到一些数学运算,比如摄像机的移动,人物移动,怪物ai的巡逻,技能特效的角度等等,下面是整理出一些常用(也可以说是比较简单的)的数学运算公式。

Mathf.Lerp                插值
Mathf.Abs                 绝对值 
Mathf.Max                 最大值 
Mathf.Min                 最小值 
Mathf.Clamp               限制 
Mathf.Clamp01             限制0~1 
Mathf.MoveTowards         移向
Mathf.PI                  圆周率 
Mathf.Round               四舍五入 
Mathf.RoundToInt          四舍五入到整数 
Mathf.Sign                符号(-1or1)
Mathf.Sqrt                平方根 
Mathf.Tan正切 / Mathf.Sin正弦 / Mathf.Cos余弦

再来整理一些用法吧。

Mathf.Lerp插值
static float Lerp(float a, float b, float t);
插值是根据Lerp(a,b,t)中的第三个参数t来返回a和b之间的值,如果t是变化的,比如Time.time,则在一秒之内从a变化到b.

下面是一个摄像机跟随人物(character)的方法,注意避免抖动跟随函数放在FixedUpdate()里面。

void FixedUpdate()
    {
        //character.position为人物坐标,Man_smooth为设置的平滑度
        transform.position = Vector3.Lerp(transform.position, character.position, Time.deltaTime * Man_smooth);
    }

Mathf.Sign 符号
static float Sign(float f);
返回 f 的数字符号。
当 f 为正或为0返回1,为负返回-1。

       //获得方向盘横轴(A/D,left/right)
       float h = Input.GetAxis("Horizontal");

        if (h != 0)
        {
            //物体按时间增量(Time.deltaTime)*速度(speed)*
            //方向(Mathf.Sign(h))在X轴移动
            //按下A键,则h<0,Mathf.Sign(h)返回-1,则物体方向向左,反之向右。
            transform.position += 
            new Vector3(Time.deltaTime * speed * Mathf.Sign(h), 0, 0);
        } 

Mathf.Min 最小值
static float Min(float a, float b);
返回两个或更多值中最小的值。

下面是一个增加生命值的方法。

      float Health=10;      //当前生命值
      float MaxHealth=100;  //最大生命值
 public void GiveHealth(int health, GameObject instigator)
    {
        // 增加生命值,但最多不超过最大生命值
        //“Mathf.Min()返回两个或多个值中的最小值。”
        Health = Mathf.Min(Health + health, MaxHealth);
    }

Mathf.Abs 绝对值
static float Abs(float f);
返回f的绝对值。

下面是一个怪物攻击附近人物的方法(并不严谨)

    float Distance=5;
    void Attack()
      {
      //当“我”与目标的X轴绝对值小于Distance(距离时)
      if (Mathf.Abs(transform.position.x - character.position.x) < Distance)
          {
             //敌羞我去脱它衣(攻击)
          }
      }

Mathf.Clamp 限制
static float Clamp(float value, float min, float max);
限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value

下面是一个我在2D人物骨骼动画需要用到的方法,人物头部随着鼠标在一定角度限制内抬头和低头(比如头部不能向后翻到后背上-。-!)

float min = 60f;  //最小抬头角度
float max = 120f; //最大抬头角度

float rotationZ = 90f; //因为这里是2d人物,头部旋转Z轴

void Update()
{

    //当检测到按住鼠标左键时执行
    if(Input.GetMouseButton(0))
    {
        //需要旋转的角度的值来自于当我们上下移动鼠标(也就是鼠标在屏幕坐标系Y上的移动情况)再乘上10f个单位。
        rotationZ += Input.GetAxis("Mouse Y") * 10f; 

        //数学限制值方法,第一个参数是需要限制的值,第二个是最小值,第三个是最大值
        rotationZ = Mathf.Clamp(rotationY,min,max); 

        //利用自身欧拉角,来控制头部的旋转角度。
        transform.localEulerAngles = new Vector3(0,0,rotationZ);

    }

}

…….

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值