zoukankan      html  css  js  c++  java
  • 【Unity3D】实现云循环漂浮效果

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 
    /// CloudFlow说明
    ///
    /// 1.该脚本挂在Cloud Object上;
    /// 2.将背景挂在Inspecter中到“_背景”中;
    /// 3.“_从左到右”值,勾选左到右,不勾选右到左;
    /// 4.“_速度”改变云漂浮速度
    /// 5.“_离开画面距离”,决定云离开画面多远开始从另一边循环
    /// 6.“_上下浮动效果”勾选开启浮动效果,默认不开启;
    /// 
    /// </summary>
    
    public class CloudFlow : MonoBehaviour
    {
        public bool _从左到右 = true;
        public float _速度 = 2;
        public float _离开画面程度 = 5;
        public BoxCollider2D _背景;
        public bool _上下浮动效果 = false;
        public float _上下浮动幅度 = 5;
        public float _上下浮动速度 = 5;
    
        private float x_开始位置, x_结束位置;
        private float _正向系数 = 1;
        private float y_中心位置;
        private static float radian_0_1 = 0;
    
        void Start()
        {
            PosInitialize();
        }
    
        void Update()
        {
            Flow();
            if (_上下浮动效果)
            {
                VerticalFlow(); 
            }
            if (isArriveMargin())
            {
                ChangePos();
            }
        }
        //上下浮动方法
        public void VerticalFlow()
        {
            radian_0_1 += _上下浮动速度*0.001f;
            float dy = Mathf.Cos(radian_0_1) * 0.1f * _上下浮动幅度;
            transform.position = new Vector3(transform.position.x, y_中心位置 + dy, transform.position.z);
        }
        //参数初始化方法
        public void PosInitialize()
        {
            if (_从左到右)
            {
                _正向系数 = 1;
                x_结束位置 = _背景.bounds.max.x + _离开画面程度+2;
                x_开始位置 = _背景.bounds.min.x - _离开画面程度-2;
            }
            else
            {
                _正向系数 = -1;
                x_开始位置 = _背景.bounds.max.x + _离开画面程度+2;
                x_结束位置 = _背景.bounds.min.x - _离开画面程度-2;
            }
            y_中心位置 = transform.position.y;
        }
        //横向漂动方法
        public void Flow()
        {
            this.transform.position += new Vector3(_正向系数 * _速度 * 0.01f, 0, 0);
        }
        //判断是否该归位方法
        public bool isArriveMargin()
        {
            return (_从左到右 && transform.position.x > x_结束位置) || (!_从左到右 && transform.position.x < x_结束位置);
        }
        //循环归位方法
        public void ChangePos()
        {
            transform.position = new Vector3(x_开始位置, transform.position.y, transform.position.z);
        }
    
    
    }
    
  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/garychen97/p/14371518.html
Copyright © 2011-2022 走看看