コード例 #1
0
    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;
        }
    }
コード例 #2
0
ファイル: AnalyXml.cs プロジェクト: yuqtj/UnityGame_college
    /// <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));
    }
コード例 #3
0
ファイル: TalkAction.cs プロジェクト: yuqtj/UnityGame_college
    /// <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);
    }
コード例 #4
0
    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);
        }
    }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    public PersonDirection GetPlayerDir()
    {
        PersonDirection dir = InputManager.GetCurrentDir();

        if (dir == PersonDirection.None)
        {//如果方向没有改变,返回原值
            return(GetPlayerData().Dir);
        }

        SetPlayerDir(dir);

        return(dir);
    }
コード例 #8
0
    /// <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);
    }
コード例 #9
0
    /// <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;
        }
    }
コード例 #10
0
 public TurnCommand(string npcName, PersonDirection turnDir, bool needAC = false)
 {
     this.npcName = npcName;
     needAsync    = needAC;
     dir          = turnDir;
 }
コード例 #11
0
 public void SetPlayerDir(PersonDirection dir)
 {
     GetPlayerData().Dir = dir;
 }