private void HandleGravitySpeed(PlayerMoveCom moveCom, PropertyCom propertyCom) { float massValue = 0; switch (moveCom.CurrMoveType) { case Behavior.MoveType.None: case Behavior.MoveType.Run: case Behavior.MoveType.Jump: massValue = 1; break; case Behavior.MoveType.Climb: case Behavior.MoveType.ClimbJump: case Behavior.MoveType.GrabWall: massValue = 0.6f; break; default: break; } Vector2 gVector = new Vector2(0, GravitySystem._G); if (moveCom.Rig.velocity.y < 0) { moveCom.Rig.velocity += gVector * 1.5f * massValue * Time.deltaTime; } else if (moveCom.Rig.velocity.y > 0) { moveCom.Rig.velocity += gVector * 1 * massValue * Time.deltaTime; } }
protected override void HandleComs(List <BaseCom> comList) { PropertyCom propertyCom = GetCom <PropertyCom>(comList[0]); PlayerMoveCom moveCom = GetCom <PlayerMoveCom>(comList[1]); if (moveCom.ReqMove != Vector3.zero) { moveCom.Rig.MovePosition(moveCom.Rig.position + moveCom.ReqMove.ToVector2()); moveCom.ReqMove = Vector3.zero; } if (moveCom.HasNoReqMove) { return; } //移动 moveCom.Rig.velocity = new Vector2(moveCom.ReqMoveSpeed, moveCom.Rig.velocity.y); if (moveCom.ReqJumpSpeed != 0) { moveCom.Rig.velocity = new Vector2(moveCom.Rig.velocity.x, moveCom.ReqJumpSpeed); } HandleGravitySpeed(moveCom, propertyCom); HandleMoveAnim(comList); }
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; }
protected override void HandleComs(List <BaseCom> comList) { GazeSurroundCom gazeSurroundCom = GetCom <GazeSurroundCom>(comList[0]); TransformCom transCom = GetCom <TransformCom>(comList[1]); PropertyCom propertyCom = GetCom <PropertyCom>(comList[2]); if (gazeSurroundCom.gazeUid <= 0) { return; } Entity gazeEntity = ECSLocate.ECS.GetEntity(gazeSurroundCom.gazeUid); if (gazeEntity == null) { return; } Vector2 selfPos = transCom.GetPos(); Vector2 targetPos = gazeEntity.GetCom <TransformCom>().GetPos(); //方向 if (selfPos.x - targetPos.x > 0) { transCom.ReqDir = DirType.Left; } else { transCom.ReqDir = DirType.Right; } //移动 gazeSurroundCom.moveDir = CalcWanderMoveDir(selfPos, gazeSurroundCom, targetPos); Vector3 delta = new Vector3(gazeSurroundCom.moveDir == DirType.Right ? 1 : -1, 0, 0); delta = delta * propertyCom.MoveSpeed.Curr * Time.deltaTime; transCom.ReqMove = delta; }
protected override void OnEnter(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; //参数 Vector2 inputMove = workData.GetParam().GetVect2(); //组件 PlayerMoveCom moveCom = workData.MEntity.GetCom <PlayerMoveCom>(); TransformCom transCom = workData.MEntity.GetCom <TransformCom>(); Collider2DCom collider2DCom = workData.MEntity.GetCom <Collider2DCom>(); PropertyCom propertyCom = workData.MEntity.GetCom <PropertyCom>(); //跳跃阶段重置 ResetJumpStep(moveCom, collider2DCom); if (CheckMoveTypeInCD(moveCom)) { moveCom.HasNoReqMove = true; return; } else { moveCom.HasNoReqMove = false; } MoveType moveType = CalcMoveType(collider2DCom, moveCom, inputMove); switch (moveType) { case MoveType.None: moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = 0; break; case MoveType.Run: moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * inputMove.x; moveCom.ReqJumpSpeed = 0; break; case MoveType.Jump: moveCom.JumpStep++; moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = propertyCom.JumpSpeed.Curr * inputMove.y; break; case MoveType.Climb: inputMove.x = inputMove.x < 0 ? -inputMove.x : inputMove.x; moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr * inputMove.x; break; case MoveType.ClimbJump: int moveValue = inputMove.x < 0 ? -1 : 1; moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * moveValue; moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr; break; case MoveType.GrabWall: moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = 0; break; default: break; } ClampMoveSpeed(moveCom, collider2DCom); HandleMoveTypeCD(moveType, moveCom); HandleMoveDir(moveCom, transCom); //记录状态 moveCom.CurrMoveType = moveType; if (inputMove.y != 0) { Debug.LogWarningFormat("BEV_ACT_Move>>>>>{0}--ReqMoveSpeed:{1}--ReqJumpSpeed:{2}", moveType.ToString(), moveCom.ReqMoveSpeed, moveCom.ReqJumpSpeed); } }