zoukankan      html  css  js  c++  java
  • Unity3D之空间转换学习笔记(二):基础数学

    这期笔记我们专注Unity提供的各种数学相关的类来学习。

    时间Time

    API文档地址:http://docs.unity3d.com/ScriptReference/Time.html

    时间加/减速

    Demo04是一个自由落体的弹性小球从天空落下的一个场景,用于测试下面的示例所用。

    这个效果在游戏中也比较常用,比如在战斗游戏中,打败BOSS或我方死亡时都会呈现一种慢镜头的效果。

    我们的脚本按下空格将会减速10倍的时间,脚本绑定在摄像机上,代码如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Demo04Script : MonoBehaviour
     5 {
     6     void Start()
     7     {
     8     }
     9     
    10     void Update()
    11     {
    12         if (Input.GetKeyDown(KeyCode.A))
    13         {
    14             Time.timeScale = 0.1f;
    15             Time.fixedDeltaTime = 0.002f;
    16         }
    17         if (Input.GetKeyUp(KeyCode.A))
    18         {
    19             Time.timeScale = 1.0f;
    20             Time.fixedDeltaTime = 0.02f;
    21         }
    22     }
    23 }

    需要注意的是除了修改timeScale之外,还要修改物理运算的fixedDeltaTime,否则在物理模拟中会由于间隔过小导致出现跳帧的现象,大家可以注释掉fixedDeltaTime的代码运行查看。

    随机数Random

    API文档地址:http://docs.unity3d.com/ScriptReference/Random.html

    随机数比较简单,就不过多讲解了。

    数学运算Mathf

    API文档地址:http://docs.unity3d.com/ScriptReference/Mathf.html

    平滑过渡变色

    Demo05是一个随机变换颜色的小盒子,用于测试下面的示例所用。

    主要使用到了柏林噪音,具体的代码如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Demo05Script : MonoBehaviour
     5 {
     6     public GameObject cube;
     7 
     8     private Material _material;
     9     private Vector3 _colorSpace;
    10 
    11     void Start()
    12     {
    13         _material = cube.GetComponent<Renderer>().material;
    14 
    15         _colorSpace = new Vector3(
    16                 Random.Range(0f, 10f),
    17                 Random.Range(0f, 10f),
    18                 Random.Range(0f, 10f)
    19             );
    20     }
    21     
    22     void Update()
    23     {
    24         float r = Mathf.PerlinNoise(Time.time, _colorSpace.x);
    25         float g = Mathf.PerlinNoise(Time.time, _colorSpace.y);
    26         float b = Mathf.PerlinNoise(Time.time, _colorSpace.z);
    27 
    28         _material.color = new Color(r, g, b);
    29     }
    30 }

    由于柏林噪音是一种平滑的随机形式,所以我们的颜色改变也是平滑过渡的,如果使用普通的随机数则达不到平滑过渡的效果。

    工程文件下载

    http://pan.baidu.com/s/1sjQJ5j3

  • 相关阅读:
    如何在iOS中使用Block(转)
    blocks 学习(转)
    关于sqlite3 top的查询
    IOS多线程编程
    iOS平台内存常见问题(转)
    关于C中数组的组织存放
    消息推送机制实现与探讨
    IOS单例模式(Singleton)
    assign copy retain
    关于浮动,怪异模式
  • 原文地址:https://www.cnblogs.com/hammerc/p/4644162.html
Copyright © 2011-2022 走看看