TyeUnityToolsCS

TyeUnityToolsCS.cs

using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using FfmpegUnity;
using UnityEngine;
using UnityEngine.UI;

public class TyeUnityToolsCS : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void yePlayerPoseAnimatiom()
    {
        if (null == eSeq)
        {
            eSeq = DOTween.Sequence();
            eSeq.Append(eImgWhiteAni.DOFade(0.5f, 0.02f));
            eSeq.Append(eImgWhiteAni.DOFade(0, 0.02f));
            eSeq.Append(eImgWhiteAni.DOFade(0.5f, 0.02f));
            eSeq.Append(eImgWhiteAni.DOFade(0, 0.02f));
            eSeq.Append(eImgWhiteAni.DOFade(0.5f, 0.02f));
            eSeq.SetAutoKill(false);
            return;
        }
        eSeq.Restart();
    }
    // 解压Zip  yeToUnZip


    // 格式化:
    public void yeF() {
        string eStrTime = "32,42"; //"32,42", // "00:00:15.0",
        string[] eArrStr = eStrTime.Split(',');
        int eIntLS = int.Parse(eArrStr[0]);
        int eM = eIntLS / 60;
        int eS = eIntLS % 60;
        string eStrM = string.Format("{0:D2}", eM);
        string eStrS = string.Format("{0:D2}", eS);
        eStrHighlightMomenStartTime = $"00:{eStrM}:{eStrS}.0";
        eIntHighlightMomenDurationSec = int.Parse(eArrStr[1]) - int.Parse(eArrStr[0]);
    }


    // 播放音频:
    [System.NonSerialized] public AudioSource eAudioSource;
    public void yePlayMp3(string ePathToMp3)
    {
        try
        {
            AudioClip eClip = Resources.LoadAsync<AudioClip>(ePathToMp3).asset as AudioClip;
            eAudioSource.clip = eClip;
            eAudioSource.Stop();
            eAudioSource.Play();
        }
        catch (Exception e)
        {
            Debug.Log($"---播放{ePathToMp3}音频,异常:{e}--");
        }
    }
    
    public void yeSetVideoProgress(Slider eSlider = null)
    {
        //try
        //{
        //    float eT = (float)(eMediaPlayer.Control.GetCurrentTime() / eMediaPlayer.Control.GetBufferedTimes().Duration);
        //    float eVal = Mathf.Clamp(eT, 0.0f, 1.0f);
        //    eSlider.value = float.IsNaN(eVal) ? 0f : eVal;  // 【处理不是值的情况】
        //}
        //catch (Exception e)
        //{
        //    Debug.Log($"--- 视频进度 异常:{e} --");
        //}
    }
    
    //--- 7.  计算 时间:
    public string yeGetTimeNow()
    {
        DateTime eNowTime = DateTime.Now.ToLocalTime();
        string eStrTime = eNowTime.ToString("yyyy/MM/dd HH:mm:ss");
        //Debug.Log($"---当前的时间:{eStrTime} --");
        return eStrTime;
    }

    public int yeGetTimeDif(string eStrTimeLast = "2022/03/23 11:15:57")
    {
        DateTime eTimeNow = DateTime.Now;
        TimeSpan eTimeSpan = eTimeNow.Subtract(DateTime.Parse(eStrTimeLast)).Duration();
        //Debug.Log("---过了:" + eTimeSpan.Hours + "时" + eTimeSpan.Minutes + "分" + eTimeSpan.Seconds + "秒");
        //string eStrDif = $"{eTimeSpan.Hours}_{eTimeSpan.Minutes}_{eTimeSpan.Seconds}";

        //PlayerPrefs.SetInt("eKeySaveGameTime", eTimeDif);
        //PlayerPrefs.Save();

        //Debug.Log($"---累计:{eTimeSpan.TotalSeconds}秒--");
        return (int)(eTimeSpan.TotalSeconds);
    }



    //--- 获取当前的帧图片: 
    public Texture2D yeGetVideoCurrentFrameImage(Image eImgShowTest = null)
    {
        //Texture2D eTexture2D = new Texture2D(1920, 1080);
        //eTexture2D = eMediaPlayer.ExtractFrame(eTexture2D);

        //if (null != eImgShowTest)
        //{
        //    eImgShowTest.sprite = Sprite.Create(eTexture2D, new Rect(0, 0, eTexture2D.width, eTexture2D.height), Vector2.zero);
        //}

         保存:
        eResourcesCS.yeSaveImgToLocally(eTexture2D, ePathSave + $"{yeGetVideoCurrentTimeFrames()}.png");
        //return eTexture2D;
        return null;
    }



    ///-- 图片帧动画: 通用  (Unity 原生的播不了gif动画,要转成图片播)
    public IEnumerator yeAnimatiomForImagesFrame(Image eImg, List<Sprite> eListSprites, float eTime = 0.03f, int eIndex = 0)
    {
        eImg.gameObject.SetActive(true);
        while (true)
        {
            if (eIndex > eListSprites.Count - 1)
            {
                eImg.gameObject.SetActive(false);
                break;

                //重复播放后面的部分: index: 用来控制起始播放的动画帧索引;
                //index = 15;
            }

            eImg.sprite = eListSprites[eIndex];
            eIndex++;
            yield return new WaitForSeconds(eTime);//等待间隔, 控制动画播放速度;
        }
    }


    ///-- 改变 图片的 像素点:
    public static void yeDrawOnRawImage(RawImage eRawImg) 
    { //Graphics.DrawTexture(), Texture2D.SetPixels(), Texture2D.Apply();
        try {
            Texture eT = eRawImg.texture;
            Texture2D eT2D = eT as Texture2D;
            for (int i = 0; i < eT2D.width * 0.5f; i++){
                for (int j = 0; j < eT2D.height * 0.5f; j++){
                    eT2D.SetPixel(i, j, UnityEngine.Color.red);
                }
            }
            eT2D.Apply();
        }
        catch (Exception e){
            Debug.Log($"---yeDrawOnRawImage 异常:{e}--");
        }
    }



    //--- 视频裁剪:  插件  FfmpegUnity     using FfmpegUnity;
    public void yeVideoTrim(FfmpegCommand eFfmpegCommand, string ePathVideo, string ePathVideoSave, string eStrFromTime = "00:00:15.0", int eDurationSec = 15)
    { ///  -y -i .../input.mp4 -ss 00:00:50.0 -codec copy -t 20 .../output.mp4
        //FfmpegCommand eFfmpegCommand = new FfmpegCommand();
        //eFfmpegCommand.ExecuteOnStart = false;
        //eFfmpegCommand.Options = $"-y -i '/Users/edy/Desktop/0407/Test.mp4' -ss 00:00:15.0 -codec copy -t 15 '/Users/edy/Desktop/0407/Test5.mp4'";

        eFfmpegCommand.StopFfmpeg(); // 须 先停止 可能还在进行的命令, 再去执行新的命令;
        eFfmpegCommand.Options = $"-y -i '{ePathVideo}' -ss {eStrFromTime} -codec copy -t {eDurationSec} '{ePathVideoSave}'";
        eFfmpegCommand.StartFfmpeg();
    }



    ///-- 5.3 动画状态机: (做成预制体:不能通用)
    public IEnumerator yeAnimatiomKeyFrame()
    {
        //AnimationClip oldClip = activeAnimationClip;
        //activeAnimationClip = CopyAnimationClipAsset(activeAnimationClip);
        //animationWindowReflect.activeAnimationClip = activeAnimationClip;
        //animationWindowReflect.currentTime = currentTime;
        yield return null;
    }

    ///-- 5.4 特效: 粒子系统:
    public IEnumerator yeAnimatiomForParticleSystem()
    {
        yield return null;
    }

    ///-- 5.5 特效: Shader
    public IEnumerator yeAnimatiomForShader()
    {
        yield return null;
    }

    ///-- 5.6 跑马灯效果: (逐渐消失) using DG.Tweening;
    public void yeAni(Image eImg, Image eImg2)
    {
        //eImg.DOFillAmount(0, 5).SetEase(Ease.Linear);
        eImg2.DOFillAmount(1, 5).SetEase(Ease.Linear);
    }

    public void yePoseMoveAnimatiom(Image eImg, float eDuration = 1.5f, float eX = -1000.0f)
    {
        Debug.Log($"--- 动画 Move --");
        eImg.transform.DOLocalMoveX(eX, eDuration, true)
            .SetEase(Ease.InOutQuint)
            .OnComplete(yePoseMoveAnimatiomComplete);
    }

    public void yePoseMoveAnimatiomComplete()
    {
        Debug.Log($"--- 动画 Ok --");
        //eTweenerMove.Rewind();
        //eTweenerMove.onUpdate();
        //eTweenerMove.onComplete();

        //eImgPoseMove.gameObject.SetActive(false);
        //eImgPoseMove.DOFade(0, 0.5f);




        // 姿态 目标 图片:
        //StartCoroutine(eResourcesCS.yeGetImageFromPath($"{eImgIndex}T", eImgPoseTarget)); // TODO:名称 标识;
        //eImgPoseTarget.DOFade(1, 0.5f);
        //eImgPoseTarget.gameObject.SetActive(true); // 直接在这设置会闪白(可加动画掩盖);


        // 姿态 动画 图片:
        //StartCoroutine(eResourcesCS.yeGetImageFromPath($"{eImgIndex}", eImgPoseMove));
        //eImgPoseMove.gameObject.SetActive(true);
        //eTweenerMove.Restart();
    }
    void yeInitAnimatiomMove()
    {
        DOTween.SetTweensCapacity(2, 3);
        
    }



    void yeCreateAnimatiomMove(float eX = -1000.0f)
    {
        //eImgBG.sprite = Sprite.Create(eTexture, new Rect(0, 0, eTexture.width, eTexture.height), Vector2.zero);
        //Tweener eMoveTweener = eTransformMove.DOMove(new Vector3(500, 0, 0), 2.5f)
        //    .SetEase(Ease.InOutQuart)
        //    .OnComplete(yeAnimatiomOnComplete);
        //eMoveTweener.Pause();  //设置暂停
        //eTweenerMove = eImgPoseMove.transform.DOLocalMoveX(eX, ePoseMoveAniTime, true)
        //    .SetEase(Ease.InOutQuint)
        //    .OnComplete(yeAnimatiomMoveComplete);
        //eTweenerMove.SetAutoKill(false);   //取消自动销毁
    }

    void yeAnimatiomMoveComplete()
    {
        //isAniMoveComplete = true;
        //eImgPoseMove.gameObject.SetActive(false);
        //eImgPoseTarget.DOFade(0, 0.5f);
    }

    //---3. 姿态图片动画:
    public Sequence yeInitPoseAnimatiom(Image eImg)
    {
        Sequence eSeq = DOTween.Sequence();
        eSeq.Append(eImg.DOFade(1, 0.05f));
        eSeq.Append(eImg.DOFade(0, 0.05f));
        eSeq.Append(eImg.DOFade(1, 0.05f));
        eSeq.SetAutoKill(false);
        return eSeq;
    }



    //---2. 播放视频:
    /  外部调用 播放视频:
    //public void yeVideoStart(string ePathVideo, bool isLoop = false)
    //{
    //    Debug.Log($"--- 播放视频 开始 --");
    //    eMediaPlayer.Stop();
    //    eMediaPlayer.OpenMedia(MediaPathType.RelativeToPersistentDataFolder, ePathVideo, true);
    //    eMediaPlayer.Events.AddListener(yeVideoPlayerEvents);
    //    eMediaPlayer.Loop = isLoop;
    //}

    //void yeVideoPlayerEvents(MediaPlayer mp, MediaPlayerEvent.EventType mediaPlayerEvent, ErrorCode errorCode)
    //{
    //    switch (mediaPlayerEvent)
    //    {
    //        case MediaPlayerEvent.EventType.MetaDataReady:
    //            break;
    //        case MediaPlayerEvent.EventType.ReadyToPlay:
    //            break;
    //        case MediaPlayerEvent.EventType.Started:
    //            break;
    //        case MediaPlayerEvent.EventType.FirstFrameReady://只有播放器为非循环模式时这个条件才会调用
    //            break;
    //        case MediaPlayerEvent.EventType.FinishedPlaying:
    //            //Control.Instance.PlayBack();
    //            yeVideoPlayerComplete();
    //            break;
    //        case MediaPlayerEvent.EventType.Closing:
    //            break;
    //        case MediaPlayerEvent.EventType.Error:
    //            break;
    //        case MediaPlayerEvent.EventType.SubtitleChange:
    //            break;
    //        case MediaPlayerEvent.EventType.Stalled:
    //            break;
    //        case MediaPlayerEvent.EventType.Unstalled:
    //            break;
    //        case MediaPlayerEvent.EventType.ResolutionChanged:
    //            break;
    //        case MediaPlayerEvent.EventType.StartedSeeking:
    //            break;
    //        case MediaPlayerEvent.EventType.FinishedSeeking:
    //            break;
    //        case MediaPlayerEvent.EventType.StartedBuffering:
    //            break;
    //        case MediaPlayerEvent.EventType.FinishedBuffering:
    //            break;
    //        case MediaPlayerEvent.EventType.PropertiesChanged:
    //            break;
    //        case MediaPlayerEvent.EventType.PlaylistItemChanged:
    //            break;
    //        case MediaPlayerEvent.EventType.PlaylistFinished:
    //            break;
    //        default:
    //            break;
    //    }
    //}


    --- 8. 视频录制: AVPro Movie Capture  支持平台:ios,macos,Windows(2022.7.22发布最新5.0版本 已经支持安卓)Android
     NatCorder , AVCapture 插件  : 用FromScreen, 不要用FromCamera (画面会闪, 目前没有去看原因)
    //public void yeVideoRecordToCam(CaptureFromTexture eCaptureCam, string ePathSave, Texture eTexture)
    //{
    //    eCaptureCam.SetSourceTexture(eTexture);
    //    //eCaptureCam.UpdateSourceTexture();
    //    yeVideoRecordStart(eCaptureCam, ePathSave, true);
    //}

     ScreenCapture , TextureCapture
    //public void yeVideoRecordStart(CaptureBase eCapture, string ePathSave, bool isCam = false)
    //{
    //    eCapture.AppendFilenameTimestamp = false; //是否加时间戳
    //    eCapture.FilenameExtension = "mp4"; //视频名称后缀
    //    eCapture.OutputFolderPath = ePathSave; //视频保存路径

    //    //eCapture._autoGenerateFilename = false;
    //    //eCapture._codecName = "Media Foundation H.264(MP4)"; //视频格式
    //    //eCapture._useMediaFoundationH264 = true;
    //    //eCapture._forceFilename = "CaptureVideo.mp4";
    //    if (!isCam)
    //    {
    //        //eCapture.ResolutionDownscaleCustom = new Vector2(640, 360);
    //        eCapture.ResolutionDownScale = CaptureBase.DownScale.Half;
    //    }

    //    //开始拍摄功能
    //    eCapture.StartCapture();
    //    //yield return null;
    //}

    //public void yeVideoRecordStop(CaptureBase eCapture)
    //{
    //    eCapture.StopCapture();
    //}

    //public void yeVideoRecordCancel(CaptureBase eCapture)
    //{
    //    eCapture.CancelCapture();
    //}

    //public void yeVideoTrim(FfmpegCommand eFfmpegCommand, string ePathVideo, string ePathVideoSave, string eStrFromTime = "00:00:15.0", int eDurationSec = 15)
    //{
    //    eFfmpegCommand.StopFfmpeg();
    //    eFfmpegCommand.Options = $"-y -i '{ePathVideo}' -ss {eStrFromTime} -codec copy -t {eDurationSec} '{ePathVideoSave}'";
    //    eFfmpegCommand.StartFfmpeg();
    //}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值