一个touchscript的代码片段

30 篇文章 0 订阅
24 篇文章 1 订阅
using Spine.Unity;
using System;
using System.Collections;
using System.Collections.Generic;
using TouchScript;
using UnityEngine;
using static Spine.AnimationState;

public class TouchMgr : MonoBehaviour
{
    #region public variables
    public GameObject SelectedColor;
    #endregion
    #region private variables
    private SkeletonAnimation skeletonAnimation;
    #endregion
    #region private methods
    void OnEnable()
    {
        if (TouchManager.Instance != null)
        {
            TouchManager.Instance.TouchesBegan += TouchesBeganHandler;
            TouchManager.Instance.TouchesMoved += TouchesMovedHandler;
            TouchManager.Instance.TouchesEnded += TouchesEndedHandler;

        }
    }

    void OnDisable()
    {
        if (null != TouchManager.Instance)
        {
            TouchManager.Instance.TouchesBegan -= TouchesBeganHandler;
            TouchManager.Instance.TouchesMoved -= TouchesMovedHandler;
            TouchManager.Instance.TouchesEnded -= TouchesEndedHandler;
        }
    }




    private void TouchesEndedHandler(object sender, TouchEventArgs e)
    {
        
        //Destroy(SelectedColor);
        DeletSelectColor();
        foreach (var item in e.Touches)
        {
            var ray = Camera.main.ViewportPointToRay(Camera.main.ScreenToViewportPoint(item.Position));
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit) && hit.collider != null)
            {
                print(hit.transform.gameObject.name);
                DrawColor(hit);
                               
            }


            print("ended");
        }

    }

    private void TouchesMovedHandler(object sender, TouchEventArgs e)
    {
        print("Moved");


        Vector3 tempPos = Camera.main.ScreenToWorldPoint(e.Touches[0].Position);

        if (SelectedColor)
        {
            SelectedColor.transform.position = new Vector3(tempPos.x, tempPos.y, tempPos.z + 3);
        }





    }

    private bool IsStep(RaycastHit hit)
    {
        if (hit.transform.gameObject.name == "Spine_1_QuYa" || hit.transform.gameObject.name == "Spine_2_ZhanMu" || hit.transform.gameObject.name == "Spine_3_XiaoDu" ||
            hit.transform.gameObject.name == "Spine_4_PiKai" || hit.transform.gameObject.name == "Spine_5_ChaZhi" || hit.transform.gameObject.name == "Spine_6_KunBang" ||
            hit.transform.gameObject.name == "Spine_7_ZaiPei")
        {
            return true;
        }
        return false;
    }


    private void TouchesBeganHandler(object sender, TouchEventArgs e)
    {
        Vector3 tempPos = Camera.main.ScreenToWorldPoint(e.Touches[0].Position);
        EffectMgr.Instance.EffectPlay(Main.Instance.hitEffect, tempPos, 2);

        foreach (var item in e.Touches)
        {
            var ray = Camera.main.ViewportPointToRay(Camera.main.ScreenToViewportPoint(item.Position));
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit) && hit.collider != null)
            {
                print(hit.transform.gameObject.name);
                RaySelectColor(hit);
                RaySelectTools(hit);



                //if (hit.transform.childCount > 0)
                //{

                if (hit.transform.GetComponent<SkeletonAnimation>())
                {
                    SkeletonAnimation skeletonAnimation1;
                    if (IsStep(hit))
                    {
                        Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[0], 0.3f);
                    }
                    else
                    {
                        //Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1]);
                    }
                    skeletonAnimation1 = hit.transform.GetComponent<SkeletonAnimation>();
                    TrackEntryDelegate ac = delegate
                    {
                        skeletonAnimation1.state.SetAnimation(0, "idle", true).Complete += null;
                    };
                    StartCoroutine(TimerMgr.Instance.DelayInvoke(() =>
                    {
                        
                        //skeletonAnimation.loop = false;
                        //skeletonAnimation.state.SetAnimation(0, "hit", false).Complete += Finished;
                        skeletonAnimation1.state.SetAnimation(0, "hit", false).Complete += ac;
                        //Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[0]);
                    }, 0));
                }
                else if (hit.transform.gameObject.name == "UI_ShangChuan")
                {
                    Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[2], 0.3f);

                }
                else
                {
                    Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1],0.3f);

                }
                //    if (hit.transform.GetChild(0).GetComponent<ParticleSystem>())
                //    {
                //        EffectMgr.Instance.EffectPlay(Main.Instance.starEffect, tempPos, 5);
                //        Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1]);
                //    }
                //}
                //}


                print("Began");
            }
        }


    }

    /// <summary>
    /// 射线选择颜色
    /// </summary>
    /// <param name="hit"></param>
    private void RaySelectColor(RaycastHit hit)
    {
        if (hit.transform.gameObject.name == "UI_Hong_a")
        {
            //SelectedColor = new GameObject();
            SelectColor.Instance.SelectOrange();
            GameObject go = Instantiate(SelectColor.Instance.orange);
            go.tag = "Color";
            Destroy(go.GetComponent<BoxCollider>());
            SelectedColor = go;
            SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
        }
        if (hit.transform.gameObject.name == "UI_Fen_b")
        {
            //SelectedColor = new GameObject();
            SelectColor.Instance.SelectPink();
            GameObject go = Instantiate(SelectColor.Instance.pink);
            go.tag = "Color";
            Destroy(go.GetComponent<BoxCollider>());
            SelectedColor = go;
            SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
        }
        if (hit.transform.gameObject.name == "UI_Huang_c")
        {
            //SelectedColor = new GameObject();
            SelectColor.Instance.SelectYellow();
            GameObject go = Instantiate(SelectColor.Instance.yellow);
            go.tag = "Color";
            Destroy(go.GetComponent<BoxCollider>());
            SelectedColor = go;
            SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
        }

    }

    /// <summary>
    /// 删除选择的颜色
    /// </summary>
    private void DeletSelectColor()
    {
        GameObject[] go = GameObject.FindGameObjectsWithTag("Color");
        foreach (GameObject item in go)
        {
            Destroy(item);
        }
    }




    /// <summary>
    /// 选择其他工具:退色,上传
    /// </summary>
    /// <param name="hit"></param>
    private void RaySelectTools(RaycastHit hit)
    {
        
        if (hit.transform.gameObject.name == "UI_CheXiao")
        {
            SelectColor.Instance.ColorRecall();
        }
        if (hit.transform.gameObject.name == "UI_ShangChuan")
        {
            SelectColor.Instance.InstantiatOnePeony();
            SelectColor.Instance.ChooesePeony(0);

            SelectColor.Instance.ColorRecall();
        }

    }

    /// <summary>
    /// 上色
    /// </summary>
    private void DrawColor(RaycastHit hit)
    {
        if (hit.transform.gameObject.name == "Apatel_1")
        {
            SelectColor.Instance.DrawApatel_1();
        }
        if (hit.transform.gameObject.name == "Apatel_2")
        {
            SelectColor.Instance.DrawApatel_2();
        }
        if (hit.transform.gameObject.name == "Apatel_3")
        {
            SelectColor.Instance.DrawApatel_3();
        }
        if (hit.transform.gameObject.name == "Bpatel_1")
        {
            SelectColor.Instance.DrawBpatel_1();
        }
        if (hit.transform.gameObject.name == "Bpatel_2")
        {
            SelectColor.Instance.DrawBpatel_2();
        }
        if (hit.transform.gameObject.name == "Bpatel_3")
        {
            SelectColor.Instance.DrawBpatel_3();
        }
        if (hit.transform.gameObject.name == "Cpatel_1")
        {
            SelectColor.Instance.DrawCpatel_1();
        }
        if (hit.transform.gameObject.name == "Cpatel_2")
        {
            SelectColor.Instance.DrawCpatel_2();
        }
        if (hit.transform.gameObject.name == "Cpatel_3")
        {
            SelectColor.Instance.DrawCpatel_3();
        }






    }


    private void Finished(Spine.TrackEntry trackEntry)//,SkeletonAnimation sa)
    {
        skeletonAnimation.state.SetAnimation(0, "idle", true).Complete += null;
        //sa.state.SetAnimation(0, "idle", true).Complete += null;
    }

    #endregion
    // Start is called before the first frame update
    void Start()
    {

    }

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

    }
    
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimerMgr : Singleton<TimerMgr>
{

    #region member variables
    #endregion

    #region member methods 
    public void AddTime(ref float timer, float timeKeep, Action action)
    {
        timer += Time.deltaTime;
        if (timer > timeKeep)
        {
            action();
            timer = 0;
        }
    }

    public IEnumerator DelayInvoke(Action action, float delaySeconds)
    {
        yield return new WaitForSeconds(delaySeconds);
        action();
    }

    #endregion

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值