public void SetRunDir(PersonDirection dir) { this.dir = dir; switch (dir) { case PersonDirection.Down: idleSprite = IdleDown; moveSprite1 = WalkDown1; moveSprite2 = WalkDown2; break; case PersonDirection.Up: idleSprite = IdleUp; moveSprite1 = WalkUp1; moveSprite2 = WalkUp2; break; case PersonDirection.Left: idleSprite = IdleLeft; moveSprite1 = WalkLeft1; moveSprite2 = WalkLeft2; break; case PersonDirection.Right: idleSprite = IdleRight; moveSprite1 = WalkRight1; moveSprite2 = WalkRight2; break; } }
/// <summary> /// 解析转身指令 /// </summary> /// <param name="commandStr"></param> /// <param name="needAC"></param> public static void AnalyTurnCommand(string commandStr, bool needAC) { //以逗号形式分割 string[] strArray = commandStr.Split(','); PersonDirection dir = PersonDirection.None; switch (strArray[1]) { case "Left": dir = PersonDirection.Left; break; case "Right": dir = PersonDirection.Right; break; case "Up": dir = PersonDirection.Up; break; case "Down": dir = PersonDirection.Down; break; } CommandManager.Instance.AddCommand(new TurnCommand(strArray[0], dir, needAC)); }
/// <summary> /// 封装根据玩家射线方向获取到的npc,如果存在npc就返回True /// </summary> public bool GetNpcGoByRay() { dir = aiAttribute.GetPlayerData().Dir; switch (dir) {//根据玩家不同的朝向发射不同的射线 case PersonDirection.Down: dirVector = -aiAttribute.transform.up; break; case PersonDirection.Up: dirVector = aiAttribute.transform.up; break; case PersonDirection.Left: dirVector = -aiAttribute.transform.right; break; case PersonDirection.Right: dirVector = aiAttribute.transform.right; break; } RaycastHit2D hit = Physics2D.Raycast(aiAttribute.transform.position, dirVector, distance, npcMask); if (hit.collider != null) { npcGo = hit.collider.gameObject; return(true); } return(false); }
public void SetIdle(PersonDirection dir) { switch (dir) { case PersonDirection.Left: image.sprite = IdleLeft; dir = PersonDirection.Left; break; case PersonDirection.Right: image.sprite = IdleRight; dir = PersonDirection.Right; break; case PersonDirection.Up: image.sprite = IdleUp; dir = PersonDirection.Up; break; case PersonDirection.Down: image.sprite = IdleDown; dir = PersonDirection.Down; break; } if (name == "Player") { aiAttribute.SetPlayerDir(dir); } }
public override IEnumerator ExcuteState() { //要转换的状态 AIStateEnum nextState = AIStateEnum.None; dir = aiAttribute.GetPlayerDir(); npcAnim.SetRunDir(dir); npcAnim.StartRunAnim(); while (nextState == AIStateEnum.None) {//只要还没退出 nextState = CheckNextState(); dir = aiAttribute.GetPlayerDir(); //播放动画 npcAnim.SetRunDir(dir); //移动留到FixedUpdate后执行 yield return(new WaitForFixedUpdate()); //主角移动 Move(); yield return(0); } npcAnim.StopRunAnim(); aiAttribute.GetComponent <PlayerController>().stateMachine.ChangeState(nextState); yield return(null); }
private Vector3 MoveDir(PersonDirection dir) { Vector3 dicVector3 = Vector3.zero; switch (dir) { case PersonDirection.Left: dicVector3 = new Vector3(-1, 0, 0); break; case PersonDirection.Right: dicVector3 = new Vector3(1, 0, 0); break; case PersonDirection.Up: dicVector3 = new Vector3(0, 1, 0); break; case PersonDirection.Down: dicVector3 = new Vector3(0, -1, 0); break; } return(dicVector3); }
public PersonDirection GetPlayerDir() { PersonDirection dir = InputManager.GetCurrentDir(); if (dir == PersonDirection.None) {//如果方向没有改变,返回原值 return(GetPlayerData().Dir); } SetPlayerDir(dir); return(dir); }
/// <summary> /// 移动的函数 /// </summary> /// <param name="dic">方向</param> /// <param name="desPos">目标点</param> /// <returns></returns> IEnumerator NpcMove(PersonDirection dir, Vector3 desPos) { Vector3 dicVector3 = MoveDir(dir); //设置动画 npcAnim.SetRunDir(dir); npcAnim.StartRunAnim(); bool arrive = false; //只要还没有到达 while (!arrive) { //在FixedUpdate调用之后才执行接下来的代码 yield return(new WaitForFixedUpdate()); dicVector3 = dicVector3.normalized * moveSpeed * Time.deltaTime; transform.Translate(dicVector3); if (desPos.x == 0) {//如果是y方向上的移动 arrive = Mathf.Abs(transform.localPosition.y - desPos.y) < 0.05f; } else if (desPos.y == 0) {//如果是x方向上的移动 arrive = Mathf.Abs(transform.localPosition.x - desPos.x) < 0.05f; } } //停止动画 npcAnim.StopRunAnim(); //移动后的停留时间 if (stayHereTime != 0f) { yield return(new WaitForSeconds(stayHereTime)); } //通知移动事件结束 CommandManager.Instance.CommandOver(); yield return(null); }
/// <summary> /// 玩家找上npc,根据玩家的朝向,npc转往玩家方向 /// </summary> /// <param name="dir"></param> public void PlayerTouchYou(PersonDirection dir) { switch (dir) { case PersonDirection.Left: GetComponent <NpcAnimation>().SetIdle(PersonDirection.Right); break; case PersonDirection.Right: GetComponent <NpcAnimation>().SetIdle(PersonDirection.Left); break; case PersonDirection.Up: GetComponent <NpcAnimation>().SetIdle(PersonDirection.Down); break; case PersonDirection.Down: GetComponent <NpcAnimation>().SetIdle(PersonDirection.Up); break; } }
public TurnCommand(string npcName, PersonDirection turnDir, bool needAC = false) { this.npcName = npcName; needAsync = needAC; dir = turnDir; }
public void SetPlayerDir(PersonDirection dir) { GetPlayerData().Dir = dir; }