sin函数的应用

1.波浪

https://gitee.com/alps_01/laya_wave.git

 

 

import CustomMaterial from "./CustomMaterial.js";

 

    export default class UpdateTime extends Laya.Script {

 

    constructor() {

        super();

 

        this.material = null;

        this.time = 0;

    }

    onStart(){

        this.initShader();

 

        this.material = new CustomMaterial();

        let water = this.owner.getChildByName("water");

        water.meshRenderer.material = this.material;

    }

 

    onUpdate(){

        this.time +=  Laya.timer.delta/1000

        this.material.setTime(this.time);

    }

 

    //初始化我们的自定义shader

    initShader() {

        //所有的attributeMap属性

        var attributeMap = {'_glesVertex': Laya.VertexMesh.MESH_POSITION0, '_glesNormal': Laya.VertexMesh.MESH_NORMAL0};

        //所有的uniform属性

        var uniformMap = {

                    '_Time':Laya.Shader3D.PERIOD_MATERIAL,

                    '_PrimaryColor':Laya.Shader3D.PERIOD_MATERIAL,

                    '_SecondaryColor':Laya.Shader3D.PERIOD_MATERIAL,

                    '_SecondaryColorImpact':Laya.Shader3D.PERIOD_MATERIAL,

                    '_SecondaryColorAngle':Laya.Shader3D.PERIOD_MATERIAL,

                    '_Alpha':Laya.Shader3D.PERIOD_MATERIAL,

                    '_Intensity':Laya.Shader3D.PERIOD_MATERIAL,

                    '_Speed':Laya.Shader3D.PERIOD_MATERIAL,

                    '_Direction':Laya.Shader3D.PERIOD_MATERIAL,

                    '_WaveLength':Laya.Shader3D.PERIOD_MATERIAL,

                    '_SquareWaves':Laya.Shader3D.PERIOD_MATERIAL,

                    'u_CameraPos': Laya.Shader3D.PERIOD_CAMERA,

                    'u_MvpMatrix': Laya.Shader3D.PERIOD_SPRITE,

                    'u_WorldMat': Laya.Shader3D.PERIOD_SPRITE};

        //注册CustomShader

        var customShader = Laya.Shader3D.add("CustomShader");

        //创建一个SubShader

        var subShader = new Laya.SubShader(attributeMap, uniformMap);

        //我们的自定义shader customShader中添加我们新创建的subShader

        customShader.addSubShader(subShader);

        let vs =  `attribute vec4 _glesVertex;

        attribute vec3 _glesNormal;

        uniform  float _Time;

        uniform  vec3 u_CameraPos;

        uniform  mat4 u_WorldMat;

        uniform  mat4 u_MvpMatrix;

        uniform  vec4 _PrimaryColor;

        uniform  vec4 _SecondaryColor;

        uniform  float _SecondaryColorImpact;

        uniform  float _SecondaryColorAngle;

        uniform  float _Alpha;

        uniform  float _Intensity;

        uniform  float _Speed;

        uniform  float _Direction;

        uniform  float _WaveLength;

        uniform  float _SquareWaves;

        varying  vec4 xlv_TEXCOORD0;

        void main ()

        {

           vec4 tmpvar_1;

          tmpvar_1.xzw = _glesVertex.xzw;

           vec3 worldNormal_2;

           vec3 cameraVector_3;

           vec3 worldPosition_4;

           vec4 tmpvar_5;

           float tmpvar_6;

          tmpvar_6 = sin(_Direction);

           float tmpvar_7;

          tmpvar_7 = cos(_Direction);

           float tmpvar_8;

           float tmpvar_9;

          tmpvar_9 = (_Direction + 1.57);

          tmpvar_8 = sin(tmpvar_9);

           float tmpvar_10;

          tmpvar_10 = cos(tmpvar_9);

          tmpvar_1.y = (_glesVertex.y + (((sin((( ((_Time * _Speed) + (_glesVertex.x * tmpvar_6))+ (_glesVertex.z * tmpvar_7)) / _WaveLength)) * _Intensity)* 0.05) * sin((1.57 + (_SquareWaves * ((_glesVertex.x * tmpvar_8) + ( (_glesVertex.z * tmpvar_10) / _WaveLength)))))));

           vec3 tmpvar_11;

          tmpvar_11 = (u_WorldMat * tmpvar_1).xyz;

          worldPosition_4 = tmpvar_11;

           vec3 tmpvar_12;

          tmpvar_12 = normalize((worldPosition_4 - u_CameraPos));

          cameraVector_3 = tmpvar_12;

           vec4 tmpvar_13;

          tmpvar_13.w = 0.0;

          tmpvar_13.xyz = _glesNormal;

           vec3 tmpvar_14;

          tmpvar_14 = normalize((u_WorldMat * tmpvar_13).xyz);

          worldNormal_2 = tmpvar_14;

           float tmpvar_15;

          tmpvar_15 = ((dot (worldNormal_2, cameraVector_3) * _SecondaryColorAngle) + _SecondaryColorImpact);

          tmpvar_5.xyz = ((_PrimaryColor * (1.0 - tmpvar_15)) + (_SecondaryColor * tmpvar_15)).xyz;

          tmpvar_5.w = _Alpha;

          tmpvar_5.xyz = (tmpvar_5.xyz * _Alpha);

           vec4 tmpvar_16;

          tmpvar_16.w = 1.0;

          tmpvar_16.xyz = tmpvar_1.xyz;

          gl_Position = u_MvpMatrix * tmpvar_16;

          xlv_TEXCOORD0 = tmpvar_5;

        }`;

 

        let fs = `

        #ifdef FSHIGHPRECISION

        precision highp float;

        #else

        precision mediump float;

        #endif

        varying  vec4 xlv_TEXCOORD0;

        void main ()

        {

            gl_FragData[0] = xlv_TEXCOORD0;

        }`;

        //往新创建的subShader中添加shaderPass

        subShader.addShaderPass(vs, fs);

    }

}

 

 

2.指尖乐动小球动画

 

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Bullet : MonoBehaviour

{

    public Transform root;

    public Transform cameraTran;

    public float speed = 10;

 

    public float min_distance = 2;

    public float max_distance = 40;

 

    public float min_hight = 1;

    public float max_hight = 6;

 

    float tempTime;

    float y_lerp;

 

    float Rad180 = Mathf.Deg2Rad * 180;

    float distanceFactor = 0;

    float time = 0;

 

    public bool isPlay = false;

 

    public int index = 0;

 

    void Play() {

        isPlay = true;

    }

 

    void Stop() {

        isPlay = false;

    }

 

    void Start()

    {

        distanceFactor = min_distance / max_distance;

       

        cal();

    }

 

    void cal() {

        time = 0;

        float zDis = root.GetChild(index).position.z - transform.position.z;

        tempTime = zDis / speed;

 

        // 距离差值

        float z_lerp = distanceFactor * zDis;

        // 高度差值

        y_lerp = Mathf.Lerp(min_hight, max_hight, z_lerp);

       

    }

 

   

    float hightFactor = 0;

    void Update()

    {

        if (!isPlay) return;

 

        time += Time.deltaTime;

        hightFactor = Mathf.Sin((time / tempTime) * Rad180);

        if (hightFactor < 0) {

            // 如果在台子范围内,球弹起

            if (true)

            {

                if (index >= root.childCount)

                {

                    isPlay = false;

                    return;

                }

                cal();

                index++;

            }

            // 未落到台子上,触发游戏结束

            if (hightFactor < -0.6)

            {

                isPlay = false;

                return;

            }

        }

        //Debug.Log("hightFactor:" + hightFactor);

        //Debug.Log("hightFactor:" + hightFactor);

        //Debug.Log("y_lerp:" + y_lerp);

        transform.position = new Vector3(transform.position.x, hightFactor * y_lerp, transform.position.z + speed * Time.deltaTime);

        cameraTran.Translate(new Vector3(0,0, speed * Time.deltaTime), Space.World);

    }

 

}

 

3.呼吸灯

 

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class TestSin : MonoBehaviour {

 

 

                public Image img;

 

                public float timer = 0;

                // Use this for initialization

                void Start () {

                               

                }

               

                // Update is called once per frame

                void Update () {

                                timer += Time.deltaTime;

                                if (timer > 2 * Mathf.PI) {

                                                timer -= 2 * Mathf.PI;

                                }

                                Color c = img.color;

                                c.a = Mathf.Abs( Mathf.Sin(timer));

                                img.color = c;

 

                }

}

 

posted @ 2020-03-20 12:02  alps_01  阅读(814)  评论(0编辑  收藏  举报