移动控制

MovCtrl.cs

using UnityEngine;
using System.Text;
using System.IO;
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Specialized;
using System.Linq;
using System.Collections.Generic;

public class MovCtrl : MonoBehaviour 
{
    public Transform trans;
    public Vector3 mov;
    public Vector3 OrgPos;
    public Vector3 orgPos
    {
        get
        {
            return OrgPos;
        }
        set
        {
            OrgPos = value;
        }
    }
    public Vector3 rtAix;
    public float angle;
    public  Quaternion orgRt;
    [Tooltip("记录帧数,1秒大概50帧")]
    public int ZhenNumber=50;
    public int ZhenSum;
    public float time;
    public float timeLen; 
    public float startTime;
    public enum FuncList{eFix, eUnfix};
    public enum movState{eFixing = -1, eUnmov, eUnfixing};
    public enum FixState{eUnfixed, eFixed};
    public bool needToFixedBeforeShowParent;
    public FixState fstate= FixState.eUnfixed;
    public FixState fst
    {
        get { return fstate; }
        set {
            fstate = value;
            //if (value == FixState.eFixed)
            //{
            //    FuncReactor myFr = transform.GetComponent<FuncReactor>();
            //    if (myFr != null)
            //    {
            //        myFr.ContributeKeys();
            //        myFr.Hstate = FuncReactor.hangState.ePrtFixed;
            //    }
            //}
        }
    }
    public movState mst = movState.eUnmov;
    public bool showWhenUnfix = false;
    //public FuncList curFunc;
    protected bool isActive = false;
    [DllImport( "kernel32" )]
    private static extern long WritePrivateProfileString (string section ,
                                                          string key , 
                                                          string val, 
                                                          string filePath );
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString (string section,
                                                       string key,
                                                       string def,
                                                       StringBuilder retVal,
                                                       int size,
                                                       string filePath);
    
    public static string movDataFile = "D:\\TieTa2\\ExternData\\mov.dat";
    void Start () 
    {
        

        trans = transform;
        {
            orgPos = trans.localPosition;
            orgRt = trans.localRotation;
        }
        timeLen = time;
        ZhenSum=ZhenNumber;
        startTime = 0;
        //hideAll(true);
        if(fst == FixState.eUnfixed)
        {
            quickUnfix();
        }
        else
        {
            quickFix();
        }
        fst=FixState.eFixed;
        mst=movState.eFixing;
    }
    //按帧数累加(1秒50帧)
    public void FixedUpdate()
    {
        if(mst == movState.eUnmov)    
        {
            return;
        }
        if(ZhenNumber > 0)
        {
            trans.localPosition += (int)mst * mov * 1 / ZhenSum;
            Transform rtAixTran = trans.FindChild("RtAix");
            if(rtAixTran != null)
            {
                
            }
            else
            {
                trans.Rotate(rtAix, (int)mst * angle * 1 / ZhenSum, Space.Self);
            }
            ZhenNumber--;
            //ZhenSum++;
        }
        else
        {
            ZhenNumber = 0;
            if(mst == movState.eUnfixing)
            {
                fst = FixState.eUnfixed;
            }
            else
            {
                fst = FixState.eFixed;
            }
            mst = movState.eUnmov;
            isActive = false;
        }
    }
    public virtual void LoadInit()
    {
        if(fst == FixState.eUnfixed)
        {
            quickUnfix();
        }
        else
        {
            quickFix();
        }
    }
    
    public bool isFixed()
    {
        if(fst == FixState.eFixed)
        {
            return true;
        }
        return false;
    }
    
    public virtual void quickFix()
    {
        //Debug.Log(trans.name + "qf");
        if (trans != null)
        {
            trans.localPosition = orgPos;
            trans.localRotation = orgRt;
        }
        mst = movState.eUnmov;
       // fstate= FixState.eFixed;
        fst = FixState.eFixed;
        
        //StartCoroutine(fr.coroutineComplete(1.0f));
    }
    public void quickUnfix()
    {
        trans.localPosition = orgPos;
        trans.localRotation = orgRt;
        trans.localPosition += mov;
        
        Transform rtAixTran = trans.FindChild("RtAix");
        if(rtAixTran != null)
        {
            Vector3 rtAix2 = Vector3.zero;
            if(rtAix.x == 1)
            {
                rtAix2 = rtAixTran.right;
            }
            else if(rtAix.y == 1)
            {
                rtAix2 = rtAixTran.up;
            }
            else if(rtAix.z == 1)
            {
                rtAix2 = rtAixTran.forward;
            }
            trans.RotateAround(rtAixTran.position, rtAix2, angle);
        }
        else
        {
            trans.Rotate(rtAix, angle, Space.Self);
        }
        mst = movState.eUnmov;
        fst = FixState.eUnfixed;
    }
    public virtual void overrideFix()
    {
        isActive = true;
        trans.localPosition = orgPos;
        trans.localRotation = orgRt;
        trans.localPosition += mov;
        //trans.Rotate(rtAix, angle, Space.Self);
        Transform rtAixTran = trans.FindChild("RtAix");
        if(rtAixTran != null)
        {
            Vector3 rtAix2 = Vector3.zero;
            if(rtAix.x == 1)
            {
                rtAix2 = rtAixTran.right;
            }
            else if(rtAix.y == 1)
            {
                rtAix2 = rtAixTran.up;
            }
            else if(rtAix.z == 1)
            {
                rtAix2 = rtAixTran.forward;
            }
            trans.RotateAround(rtAixTran.position, rtAix2, angle);
            Debug.Log(rtAix2);
        }
        else
        {
            trans.Rotate(rtAix, angle, Space.Self);
        }
        time = timeLen;
        mst = movState.eFixing;
    }
    public virtual IEnumerator fix()
    {
        yield return new WaitForSeconds(startTime);
        //Debug.Log(gameObject.name + " fix time " + Time.time);
        overrideFix();
    }
    public virtual void overrideUnfix()
    {
        isActive = true;
        trans.localPosition = orgPos;
        trans.localRotation = orgRt;
        time = timeLen;
        Debug.Log("HERE"+gameObject.name);
        mst = movState.eUnfixing;
    }
    public IEnumerator unfix()
    {
        yield return new WaitForSeconds(startTime);
        Debug.Log("unfix");
        //Debug.Log(gameObject.name + " fix time " + Time.time);
        overrideUnfix();
    }
    
//  public void hide(bool ishide)
//  {
//      MeshRenderer rd = trans.GetComponent<MeshRenderer>();
//      if(rd != null)
//      {   
//          rd.enabled = !ishide;
//          Collider cld = transform.GetComponent<Collider>();
//          if(cld != null)
//          {
//              cld.isTrigger = ishide;
//          }
//      }
//  }
    //  public void hideAll(bool ishide)
//  {
//      foreach (Transform t in trans.GetComponentsInChildren<Transform>()) 
//      {
//          MeshRenderer rd = t.GetComponent<MeshRenderer>();
//          if(rd != null)
//          {
//              //Debug.Log("hd+ " + t.name + ishide);
//              rd.enabled = !ishide;
//              Collider cld = t.GetComponent<Collider>();
//              if(cld != null)
//              {
//                  cld.isTrigger = ishide;
//              }
//          }
//      }
//  }
    // Update is called once per frame



    //按时间累加计算时间
    public void Update () 
    {
//      if(mst == movState.eUnmov)    
//      {
//          return;
//      }
//      if(time > Time.deltaTime)
//      {
//          trans.localPosition += (int)mst * mov * Time.deltaTime / timeLen;
//          Transform rtAixTran = trans.FindChild("RtAix");
//          if(rtAixTran != null)
//          {
//              Vector3 rtAix2 = Vector3.zero;
//              if(rtAix.x == 1)
//              {
//                  rtAix2 = rtAixTran.right;
//              }
//              else if(rtAix.y == 1)
//              {
//                  rtAix2 = rtAixTran.up;
//              }
//              else if(rtAix.z == 1)
//              {
//                  rtAix2 = rtAixTran.forward;
//              }
//              trans.RotateAround(rtAixTran.position, rtAix2, (int)mst * angle * Time.deltaTime / timeLen);
//              //Debug.Log(rtAix2);
//          }
//          else
//          {
//              trans.Rotate(rtAix, (int)mst * angle * Time.deltaTime / timeLen, Space.Self);
//          }
//          time -= Time.deltaTime;
//      }
//      else
//      {
//          time = 0.0f;
//          if(mst == movState.eUnfixing)
//          {
//              fst = FixState.eUnfixed;
//          }
//          else
//          {
//              //trans.localPosition = orgPos;
//              //trans.localRotation = orgRt;
//              fst = FixState.eFixed;
//          }
//          mst = movState.eUnmov;
//          isActive = false;
//      }
    }
    void save()
    {
        string name = trans.name;
        WritePrivateProfileString(name, "movX", mov.x.ToString(), movDataFile);
        WritePrivateProfileString(name, "movY", mov.y.ToString(), movDataFile);
        WritePrivateProfileString(name, "movZ", mov.z.ToString(), movDataFile);
        WritePrivateProfileString(name, "rtAixX", rtAix.x.ToString(), movDataFile);
        WritePrivateProfileString(name, "rtAixY", rtAix.y.ToString(), movDataFile);
        WritePrivateProfileString(name, "rtAixZ", rtAix.z.ToString(), movDataFile);
        WritePrivateProfileString(name, "angle", angle.ToString(), movDataFile);
        WritePrivateProfileString(name, "time", time.ToString(), movDataFile);
    }
    void load(string name)
    {
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "movX", "0.0", info, 100, movDataFile);
            mov.x = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "movY", "0.0", info, 100, movDataFile);
            mov.y = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "movZ", "0.0", info, 100, movDataFile);
            mov.z = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "rtAixX", "0.0", info, 100, movDataFile);
            rtAix.x = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "rtAixY", "0.0", info, 100, movDataFile);
            rtAix.y = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "rtAixZ", "0.0", info, 100, movDataFile);
            rtAix.z = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "angle", "0.0", info, 100, movDataFile);
            angle = (float)Convert.ToDouble(info.ToString());
        }
        {
            StringBuilder info = new StringBuilder();
            GetPrivateProfileString(name, "time", "0.0", info, 100, movDataFile);
            time = (float)Convert.ToDouble(info.ToString());
        }
    }
    
    void OnGUI()
    {   
//      if(GUI.Button(new Rect(10,10,100,20),"Save"))
//      {
//          save();
//      }
//      if(GUI.Button(new Rect(10,40,100,20),"Load"))
//      {
//          load(trans.name);
//      }
//      if(GUI.Button(new Rect(10,60,100,20),"Fix"))
//      {
//          fix();
//      }
//      if(GUI.Button(new Rect(10,90,100,20),"Unfix"))
//      {
//          unfix();
//      }
//      if(GUI.Button(new Rect(10,120,100,20),"hid"))
//      {
//          hideAll(true);
//      }
//      if(GUI.Button(new Rect(10,150,100,20),"show"))
//      {
//          hideAll(false);
//      }
    }
    
//  public virtual void saveDoc(string docPath)
//  {
//      Std.WritePrivateProfileString(transform.GetHashCode().ToString(), "FixState", fst.ToString(), docPath);
//  }
//  
//  public virtual void loadDoc(string docPath)
//  {
//      //Debug.Log(docPath);
//      StringBuilder strBd = new StringBuilder();
//      if(Std.GetPrivateProfileString(transform.GetHashCode().ToString(), "FixState", "-100", strBd, 100, docPath) == 0)
//      {
//          throw(new ApplicationException("Ini Reading Er"));
//      }
//      //Debug.Log(transform.name + " is " + strBd);
//      if(strBd.ToString().CompareTo("eFixed") == 0)
//      {
//          fst = FixState.eFixed;
//          //quickFix();
//      }
//      else
//      {
//          fst = FixState.eUnfixed;
//          //quickUnfix();
//      }
//  }
    

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容