protected override void OnExit(NodeData wData, int runningStatus) { EntityWorkData workData = wData as EntityWorkData; //组件 AnimCom animCom = workData.MEntity.GetCom <AnimCom>(); animCom.SetDefaultAnim(); WanderCom wanderCom = workData.MEntity.GetCom <WanderCom>(); wanderCom.Disable(); }
protected override void OnEnter(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; //参数 float wanderRange = workData.GetParam().GetFloat(); //组件 WanderCom wanderCom = workData.MEntity.GetCom <WanderCom>(); wanderCom.WanderRange = wanderRange; wanderCom.Enable(); }
protected override void HandleComs(List <BaseCom> comList) { WanderCom wanderCom = GetCom <WanderCom>(comList[0]); TransformCom transCom = GetCom <TransformCom>(comList[1]); Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[2]); PropertyCom propertyCom = GetCom <PropertyCom>(comList[3]); wanderCom.WanderDir = CalcWanderMoveDir(transCom, wanderCom, collider2DCom); //更新方向 transCom.ReqDir = wanderCom.WanderDir; //位移 Vector3 delta = new Vector3(wanderCom.WanderDir == DirType.Right ? 1 : -1, 0, 0); delta = delta * propertyCom.MoveSpeed.Curr * Time.deltaTime; transCom.ReqMove = delta; }
public DirType CalcWanderMoveDir(TransformCom transCom, WanderCom wanderCom, Collider2DCom collider2DCom) { //碰撞判断 if (wanderCom.WanderDir == DirType.None) { return((DirType)UnityEngine.Random.Range((int)DirType.Left, (int)DirType.Right)); } //不在地面 if (!collider2DCom.Collider.Down) { return(wanderCom.WanderDir == DirType.Left ? DirType.Right : DirType.Left); } if (collider2DCom.Collider.Left) { return(DirType.Right); } if (collider2DCom.Collider.Right) { return(DirType.Left); } //范围判断 if (wanderCom.WanderRange > 0) { Vector3 currPos = transCom.GetPos(); if (Vector2.Distance(transCom.CreatePos, currPos) > wanderCom.WanderRange) { if (currPos.x - transCom.CreatePos.x > 0) { return(DirType.Left); } else { return(DirType.Right); } } } return(wanderCom.WanderDir); }