// Use this for initialization void Start() { level.Init(); rigid = GetComponent <Rigidbody>(); callInOnDrawGizmos = new List <System.Action>(); audio = GetComponent <AudioSource>(); //var funcs = new System.Action < HitMessageSender, UnityEngine.Collider >[3]; //funcs[0] = (HitMessageSender a, UnityEngine.Collider b) => { }; //funcs[1] = (HitMessageSender sender, UnityEngine.Collider collider) => //{ //}; //funcs[2] = (HitMessageSender a, UnityEngine.Collider b) => { }; //HitMessageSender.AddHitMessageSender(grippingAbleArea, funcs, new string[] { }); handMovementMode = HandMovementMode.Close; // 進む方向の手を定義する ClimberMethod.SetHandForwardAndBack(ref rightHand, ref leftHand, Vector3.right); // 仮 currentState = new AirState(); nextState = null; currentState.Init(this); }
// Update is called once per frame void Update() { if (unenableColliderResetTime > 0) { unenableColliderResetTime -= Time.deltaTime; if (unenableColliderResetTime <= 0) { GetComponent <BoxCollider>().enabled = true; } } var removeList = new List <int>(); int i = 0; foreach (var e in events) { var re = e.Action(this); // イベントの実行 if (re == false) { removeList.Add(i); } i++; } // index関係で逆順に削除 removeList.Reverse(); foreach (var index in removeList) { events.RemoveAt(index); } currentState.Update(this); //? 呼び出すタイミングの考察が必要 if (nextState != null) { currentState = nextState; nextState = null; currentState.Init(this); } // 衝突中の壁の法線方向をリセット wallNormals.Clear(); }
void ChangeState(InterfaceClimberState newState) { nextState = newState; }