// 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"); } }