zoukankan      html  css  js  c++  java
  • unity3d 纹理动画

    不知道大家有没有玩过赛车游戏

    赛车游戏的跑道有路标,如下图

    玩过赛车游戏的都知道,大多数赛车游戏的路标是会动的,如上图,它会从右往左运动

    不会发动态图,大家脑补一下吧

    没有玩过赛车游戏的也不要紧,大家见过游戏中的瀑布或者湖面吗?如下图:高山流水

     

    当然,我这个贴图的效果不是很好,不过我这里要说的是原理,不妨碍,我们继续

    图中的瀑布从上往下流动

    我们都知道,如果用粒子的话,有几百个瀑布,在手机上肯定是非常卡的

    差一点的手机说不定游戏刚打开就未响应了

    除非要求是非常逼真的那种水才用粒子系统,能不用尽量不用

    用纹理动画的话虽然达不到粒子那么逼真,但是也是一种不错的解决方案

    纹理动画耗费资源还是粒子动画耗费资源呢?我们一探究竟

    小二,上图

    好勒客官,马上来

     

    这是瀑布的材质球,我们手动修改OffsetX

    按每次+0.1这样修改:0.1,0.2,0.3,0.4....

    我们会发现,每修改一次材质球就会相应的变动

    现在我们归零,修改一下OffsetY,依旧和修改X一样的方法

    我们会发现材质球也会有相应的变动,但是方向不一样

    如果只观察材质球感觉不容易看出来,那就把材质球挂到物体上,这样看的清楚一些

    好了,我们知道如果让材质球动起来了,修改offset即可,那么我们就开始敲代码吧

    创建一个 TextureAnimation.cs

    定义一个变量:public float XSpeed = 0.1f;//X轴移动速度

    然后有了下面的代码

    1      public float XSpeed = 0.1f;//X轴移动速度
    2  
    3      void FixedUpdate()
    4      {
    5          renderer.material.mainTextureOffset = new Vector2(Time.time * XSpeed, renderer.material.mainTextureOffset.y);    
    6      }

     我们挂到瀑布上,然后运行,我们发现瀑布动起来了,但是似乎移动方向和速度不对劲

    没关系,我们刚才修改的是X轴,我们在加上Y轴和移动速度不就行了?

    依法炮制得出下面的完整代码:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 /// 纹理动画 <summary>
     5 /// 纹理动画
     6 /// </summary>
     7 public class TextureAnimation : MonoBehaviour
     8 {
     9     public bool MoveX = false;//是否移动X
    10     public bool ToUp = false;//往上移动
    11     public float XSpeed = 0.1f;//X轴移动速度
    12     private float offsetX = 0;
    13     
    14     public bool MoveY = false;//是否移动Y
    15     public bool ToLeft = false;//往左移动
    16     public float YSpeed = 0.1f;//Y轴移动速度
    17     private float offsetY = 0;
    18 
    19     
    20     void FixedUpdate()
    21     {
    22         if (MoveX)
    23         {
    24             offsetX = Time.time * XSpeed;
    25             if (ToUp) offsetX *= -1;
    26         }
    27 
    28         if (MoveY)
    29         {
    30             offsetY = Time.time * YSpeed;
    31             if (ToLeft) offsetY *= -1;
    32         }
    33 
    34         renderer.material.mainTextureOffset = new Vector2(offsetX, offsetY);    
    35     }
    36 }

    我就不多解释了,房东一会儿过来收房租了

    真烦,我都租了大半年了,想在续租一个月,因为还有一个月我才上班

    原来房租是850一个月,现在居然想收我900一个月

    原因是我只续租一个月

    我教了一千块押金,他怕我跑了不给水电费,非要我在给一千块

    我让他来收电费他也不来,说太冷了。。。。

    什么人啊这是。。。

    不说了,我先闪了

    本文链接:http://www.cnblogs.com/shenggege/p/4264463.html

  • 相关阅读:
    cron表达式
    mybatis中的#{}和${}
    mysql免安装版使用
    关于jpa添加一对多数据时外键值为空的问题
    关于时间格式化和格式转换
    属性和属性节点
    ErrorException: ORA-00904: : 标识符无效
    345. 反转字符串中的元音字母
    java 解决nginx代理的跨域访问问题
    633. 平方数之和
  • 原文地址:https://www.cnblogs.com/shenggege/p/4264463.html
Copyright © 2011-2022 走看看