private bool CheckClimbJump(Collider2DCom collider2DCom, Vector2 inputMove) { if (collider2DCom.Collider.Down) { return(false); } if (inputMove.y == 0) { return(false); } if (collider2DCom.Collider.Left) { //右横跳 if (inputMove.x > 0) { return(true); } } if (collider2DCom.Collider.Right) { //左横跳 if (inputMove.x < 0) { return(true); } } return(false); }
private MoveType CalcMoveType(Collider2DCom collider2DCom, PlayerMoveCom moveCom, Vector2 inputMove) { //没有输入 if (inputMove == Vector2.zero) { return(MoveType.None); } if (CheckClimb(collider2DCom, inputMove)) { return(MoveType.Climb); } if (CheckClimbJump(collider2DCom, inputMove)) { return(MoveType.ClimbJump); } else { if (CheckGrabWall(collider2DCom, inputMove)) { return(MoveType.GrabWall); } } if (CheckCanJump(moveCom, inputMove)) { return(MoveType.Jump); } return(MoveType.Run); }
private void HandleMove(TransformCom transCom, Collider2DCom collider2DCom, AnimCom animCom) { if (transCom.ReqMove.x != 0) { if (collider2DCom.Collider.Left && transCom.ReqMove.x < 0) { transCom.ReqMove.x = 0; } if (collider2DCom.Collider.Right && transCom.ReqMove.x > 0) { transCom.ReqMove.x = 0; } } if (transCom.ReqMove.y != 0) { if (collider2DCom.Collider.Up && transCom.ReqMove.y > 0) { transCom.ReqMove.y = 0; } if (collider2DCom.Collider.Down && transCom.ReqMove.y < 0) { transCom.ReqMove.y = 0; } } if (transCom.ReqMove == Vector3.zero) { return; } transCom.Translate(transCom.ReqMove); animCom.SetReqAnim("run"); transCom.ReqMove = Vector3.zero; }
//重置跳跃阶段 private void ResetJumpStep(PlayerMoveCom moveCom, Collider2DCom collider2DCom) { if (!collider2DCom.Collider.Down) { return; } moveCom.JumpStep = 0; }
private Shape GetEntityColliderShape(Entity entity) { Collider2DCom collider2DCom = entity.GetCom <Collider2DCom>(); TransformCom transCom = entity.GetCom <TransformCom>(); Shape shape = collider2DCom.colliderShape; shape.Translate(transCom.GetPos()); return(shape); }
//碰撞处理 private void HandleCollider(Collider2DCom collider2DCom) { Vector2 pos = collider2DCom.trans.position; collider2DCom.Collider.Up = CheckCollider(pos + collider2DCom.UpCheckPoint); collider2DCom.Collider.Down = CheckCollider(pos + collider2DCom.DownCheckPoint); collider2DCom.Collider.Left = CheckCollider(pos + collider2DCom.LeftCheckPoint); collider2DCom.Collider.Right = CheckCollider(pos + collider2DCom.RightCheckPoint); }
protected override void HandleComs(List <BaseCom> comList) { TransformCom transCom = GetCom <TransformCom>(comList[0]); Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[1]); AnimCom animCom = GetCom <AnimCom>(comList[2]); HandleDir(transCom); HandleMove(transCom, collider2DCom, animCom); transCom.UpdatePos(); }
private void HandleMoveAnim(List <BaseCom> comList) { PlayerMoveCom moveCom = GetCom <PlayerMoveCom>(comList[1]); AnimCom animCom = GetCom <AnimCom>(comList[2]); Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[3]); //地面 if (collider2DCom.Collider.Down) { if (moveCom.Rig.velocity.y > 0) { animCom.SetReqAnim("jumpUp"); return; } if (moveCom.Rig.velocity.x != 0) { animCom.SetReqAnim("run"); return; } else { animCom.SetReqAnim("idle"); return; } } else { if (collider2DCom.Collider.Left || collider2DCom.Collider.Right) { animCom.SetReqAnim("climb"); return; } //空中 if (collider2DCom.Collider.IsNull() || collider2DCom.Collider.Up) { if (moveCom.Rig.velocity.y > 0) { animCom.SetReqAnim("jumpUp"); return; } else { animCom.SetReqAnim("jumpDown"); return; } } } }
private void ClampMoveSpeed(PlayerMoveCom moveCom, Collider2DCom collider2DCom) { if (collider2DCom.Collider.Left) { if (moveCom.ReqMoveSpeed < 0) { moveCom.ReqMoveSpeed = 0; } } if (collider2DCom.Collider.Right) { if (moveCom.ReqMoveSpeed > 0) { moveCom.ReqMoveSpeed = 0; } } }
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); }
private bool CheckGrabWall(Collider2DCom collider2DCom, Vector2 inputMove) { if (collider2DCom.Collider.Down) { return(false); } if (!collider2DCom.Collider.Right && !collider2DCom.Collider.Left) { return(false); } if (inputMove.y != 0) { return(false); } if (collider2DCom.Collider.Left) { //右横跳 if (inputMove.x > 0) { return(true); } } if (collider2DCom.Collider.Right) { //左横跳 if (inputMove.x < 0) { return(true); } } return(false); }
private bool CheckClimb(Collider2DCom collider2DCom, Vector2 inputMove) { if (inputMove.y != 0) { return(false); } if (!collider2DCom.Collider.Left && !collider2DCom.Collider.Right) { return(false); } if (inputMove.x < 0 && collider2DCom.Collider.Right) { return(false); } if (inputMove.x > 0 && collider2DCom.Collider.Left) { return(false); } return(true); }
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); } }
protected override void HandleComs(List <BaseCom> comList) { Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[0]); HandleCollider(collider2DCom); }