// Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 버튼 클릭
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit, rayLength))
            {
                Debug.Log(hit.collider.name);
                hitname = hit.collider.name;

                //검출된 타겟이 Worker 일때
                if (hit.transform.gameObject.tag == "Worker")
                {
                    //본 타겟이 리스트에 없고, 최대 선택인원수 보다 적으면 effect를 생성하고 리스트에 추가한다.
                    if (CheckList() && variable.selectnpc_count < variable.Choose_NPCCount)
                    {
                        GameObject obj = Instantiate(prefab, new Vector3(hit.collider.gameObject.transform.position.x, hit.collider.gameObject.transform.position.y + 0.3f, hit.collider.gameObject.transform.position.z), Quaternion.identity) as GameObject;
                        obj.name             = hitname + "Effect";
                        obj.transform.parent = hit.collider.gameObject.transform;

                        variable.selectnpc.Add(hit.transform.gameObject);
                        variable.selectnpc_count++;

                        npcmove          = hit.transform.gameObject.GetComponent <NPCMove> ();
                        npcmove.npcstate = NPCMove.NPCState.SELECT_NPC;                         //선택된 npc의 상태를 select npc로 변경한다.
                    }
                }

                //검출된 타겟이 FruitFarm 일때
                else if (hit.transform.gameObject.tag == "FruitFarm")
                {
                    //선택된 모든 npc에게 명령을 지정함
                    for (int i = 0; i < variable.selectnpc_count; i++)
                    {
                        npcmove = variable.selectnpc [i].GetComponent <NPCMove> ();

                        //현재 사용자를 따라오는 상태라면 COMMAND_STATE 상태로 변경한다.
                        if (npcmove.npcstate == NPCMove.NPCState.FOLLOW_PLAYER && npcmove.commandstate == NPCMove.CommandState.FRUIT_PICKING)
                        {
                            npcmove.npcstate = NPCMove.NPCState.COMMAND_STATE;

                            npcmove.target = hit.transform.gameObject;                             //npc가 추적하는 target을 넘겨준다.
                        }
                    }
                }

                //검출된 타겟이 Mine 일때
                else if (hit.transform.gameObject.tag == "Mine")
                {
                    //돌 채집 인원이 많으면 초기로 돌림
                    if (variable.selectnpc_count >= variable.Stone_NPCCount)
                    {
                        Debug.Log("수행인원이 너무 많습니다.");

                        int imsi_count = variable.selectnpc_count;

                        for (int i = 0; i < imsi_count; i++)
                        {
                            npcmove = variable.selectnpc [0].GetComponent <NPCMove> ();
                            npcmove.StandardMode();
                        }
                    }

                    //아니라면 STONE_PICKING, COMMAND_STATE 상태로 변경하고 타겟을 넘겨준다.
                    else
                    {
                        for (int i = 0; i < variable.selectnpc_count; i++)
                        {
                            npcmove = variable.selectnpc [i].GetComponent <NPCMove> ();

                            if (npcmove.npcstate == NPCMove.NPCState.FOLLOW_PLAYER && npcmove.commandstate == NPCMove.CommandState.STONE_PICKING)
                            {
                                npcmove.npcstate = NPCMove.NPCState.COMMAND_STATE;

                                npcmove.target = hit.transform.gameObject;
                            }
                        }
                    }
                }

                //검출된 타겟이 Samll_Animal 일때
                else if (hit.transform.gameObject.tag == "Small_Animal")
                {
                    //수행인원과 돌개수를 확인하여 적절하지 않다면 초기로 돌린다.
                    if (variable.selectnpc_count >= variable.Hit_Small_Animal_NPCCount || CaveStorage.Instance.storedStoneObjs.Count < variable.Hit_Small_Animal_Stone)
                    {
                        Debug.Log("수행인원이 너무 많거나 돌이 부족합니다.");

                        int imsi_count = variable.selectnpc_count;

                        for (int i = 0; i < imsi_count; i++)
                        {
                            npcmove = variable.selectnpc [0].GetComponent <NPCMove> ();
                            npcmove.StandardMode();
                        }
                    }

                    //아니라면 HIT_SMALL_ANIMAL, COMMAND_STATE 상태로 변경하고 타겟을 넘겨준다.
                    else
                    {
                        for (int i = 0; i < variable.selectnpc_count; i++)
                        {
                            npcmove = variable.selectnpc [i].GetComponent <NPCMove> ();

                            if (npcmove.npcstate == NPCMove.NPCState.FOLLOW_PLAYER && npcmove.commandstate == NPCMove.CommandState.HIT_SMALL_ANIMALL)
                            {
                                npcmove.npcstate = NPCMove.NPCState.COMMAND_STATE;

                                npcmove.target = hit.transform.gameObject;
                            }
                        }
                    }
                }
            }
        }
    }
    /*
     */
    // Update is called once per frame
    void Update()
    {
        fingerpsL[0]   = fingerL[0].transform.eulerAngles;
        fingerpsL[1]   = fingerL[1].transform.eulerAngles;
        fingerpsL[2]   = fingerL[2].transform.eulerAngles;
        fingerpsL[3]   = fingerL[3].transform.eulerAngles;
        fingerpsL[4]   = fingerL[4].transform.eulerAngles;
        fingerpsR[0]   = fingerR[0].transform.eulerAngles;
        fingerpsR[1]   = fingerR[1].transform.eulerAngles;
        fingerpsR[2]   = fingerR[2].transform.eulerAngles;
        fingerpsR[3]   = fingerR[3].transform.eulerAngles;
        fingerpsR[4]   = fingerR[4].transform.eulerAngles;
        palmpsL        = palmL.transform.eulerAngles;
        palmpsR        = palmR.transform.eulerAngles;
        indexfingerpsL = indexfingerL.transform.position;
        indexfingerpsR = indexfingerR.transform.position;

        CheckPalm();
        CheckFinger();

        //지목 모션
        if (CheckLandmarkMotion() == true)
        {
            Ray ray = new Ray();

            ray.origin    = indexfingerpsL;
            ray.direction = indexfingerL.transform.forward;
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, rayLength))
            {
                Debug.Log("지목");
                // Debug.Log(hit.collider.name);
                hitname = hit.collider.name;
                //되는지 확인
                Debug.DrawRay(ray.origin, ray.direction * 10f, Color.red, 5f);
                //검출된 타겟이 Worker 일때
                if (hit.transform.gameObject.tag == "Worker")
                {
                    //본 타겟이 리스트에 없고, 최대 선택인원수 보다 적으면 effect를 생성하고 리스트에 추가한다.
                    if (CheckList() && variable.selectnpc_count < variable.Choose_NPCCount)
                    {
                        GameObject obj = Instantiate(prefab, new Vector3(hit.collider.gameObject.transform.position.x, hit.collider.gameObject.transform.position.y + 0.3f, hit.collider.gameObject.transform.position.z), Quaternion.identity) as GameObject;
                        obj.name             = hitname + "Effect";
                        obj.transform.parent = hit.collider.gameObject.transform;

                        variable.selectnpc.Add(hit.transform.gameObject);
                        variable.selectnpc_count++;

                        npcmove          = hit.transform.gameObject.GetComponent <NPCMove>();
                        npcmove.npcstate = NPCMove.NPCState.SELECT_NPC; //선택된 npc의 상태를 select npc로 변경한다.
                    }
                }
                //검출된 타겟이 FruitFarm 일때
                else if (hit.transform.gameObject.tag == "FruitFarm")
                {
                    //선택된 모든 npc에게 명령을 지정함
                    for (int i = 0; i < variable.selectnpc_count; i++)
                    {
                        npcmove = variable.selectnpc [i].GetComponent <NPCMove> ();

                        //현재 사용자를 따라오는 상태라면 COMMAND_STATE 상태로 변경한다.
                        if (npcmove.npcstate == NPCMove.NPCState.FOLLOW_PLAYER && npcmove.commandstate == NPCMove.CommandState.FRUIT_PICKING)
                        {
                            npcmove.npcstate = NPCMove.NPCState.COMMAND_STATE;

                            npcmove.target = hit.transform.gameObject;                             //npc가 추적하는 target을 넘겨준다.
                        }
                    }
                }

                //검출된 타겟이 Mine 일때
                else if (hit.transform.gameObject.tag == "Mine")
                {
                    //돌 채집 인원이 많으면 초기로 돌림
                    if (variable.selectnpc_count >= variable.Stone_NPCCount)
                    {
                        Debug.Log("수행인원이 너무 많습니다.");

                        int imsi_count = variable.selectnpc_count;

                        for (int i = 0; i < imsi_count; i++)
                        {
                            npcmove = variable.selectnpc [0].GetComponent <NPCMove> ();
                            npcmove.StandardMode();
                        }
                    }

                    //아니라면 STONE_PICKING, COMMAND_STATE 상태로 변경하고 타겟을 넘겨준다.
                    else
                    {
                        for (int i = 0; i < variable.selectnpc_count; i++)
                        {
                            npcmove = variable.selectnpc [i].GetComponent <NPCMove> ();

                            if (npcmove.npcstate == NPCMove.NPCState.FOLLOW_PLAYER && npcmove.commandstate == NPCMove.CommandState.STONE_PICKING)
                            {
                                npcmove.npcstate = NPCMove.NPCState.COMMAND_STATE;

                                npcmove.target = hit.transform.gameObject;
                            }
                        }
                    }
                }
            }
        }

        if (CheckStoneMotion() == true)
        {
            Debug.Log("돌");
            for (int i = 0; i < variable.selectnpc_count; i++)
            {
                Debug.Log(variable.selectnpc[i].name);
                variable.selectnpc [i].GetComponent <Animator> ().SetInteger("ani_state", 2);

                npcmove = variable.selectnpc[i].GetComponent <NPCMove>();
                npcmove.commandstate = NPCMove.CommandState.STONE_PICKING;
            }
        }

        //열매따기
        if (CheckFruitMotion() == true)
        {
            Debug.Log("열매");
            variable.selectnpc [i].GetComponent <Animator> ().SetInteger("ani_state", 2);

            for (int i = 0; i < variable.selectnpc_count; i++)
            {
                Debug.Log(variable.selectnpc[i].name);
                npcmove = variable.selectnpc[i].GetComponent <NPCMove>();
                npcmove.commandstate = NPCMove.CommandState.FRUIT_PICKING;
            }
        }

        //사냥하기
        if (CheckHuntMotion() == true)
        {
            Debug.Log("사냥");
            variable.selectnpc [i].GetComponent <Animator> ().SetInteger("ani_state", 2);

            for (int i = 0; i < variable.selectnpc_count; i++)
            {
                Debug.Log(variable.selectnpc[i].name);
                npcmove = variable.selectnpc[i].GetComponent <NPCMove>();
                npcmove.commandstate = NPCMove.CommandState.HIT_SMALL_ANIMALL;
            }
        }

        //플레이어 직진
        if (CheckGoMotion() == true)
        {
            float fMove = Time.deltaTime * speed;
            Player.transform.Translate(Vector3.forward * fMove);
        }

        //UI
        if (CheckUIMotion() == true)
        {
            Debug.Log("UI");
        }
    }