void AnimChangeState(StoneWorkMan swm) { state = swm; switch (swm) { case StoneWorkMan.Idle: anim.SetFloat("Idle", valuePool[value]); break; case StoneWorkMan.Move_To_DoboTower: anim.SetTrigger("Lest's Do this"); break; //case StoneWorkMan.Spread: // anim.SetTrigger("Lest's Do this"); // break; case StoneWorkMan.Hammering: anim.SetTrigger("Hammering"); break; case StoneWorkMan.Success: anim.SetFloat("Success", successValuePool[successValue]); //gameSet = false; break; case StoneWorkMan.Fail: anim.SetFloat("Defeat", valuePool[value]); //gameSet = false; break; } }
private void Spread() { //나와 가장 가깝고, 차일드 카운트가 0 인 포인트를 향해서 이동하고싶다. //차일드 카운트다 1이 된 포지션은 자동으로 리스트에서 지우도록 하자 int idx = GetWorkPosionIdx(); //타겟을 정해준다. if (idx == -1) { return; } target = WorkPositon_Manager.WP.workPosition[idx].gameObject.transform; //방향을 가장 가깝다고 한 녀석으로 정하고 //Vector3 dir = target.position - transform.position; float distance = 0.0f; Vector3 dir = GetDir(target.position, transform.position, out distance); dir.y = 0; //그쪽을 향해서 회전해 transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotSpeed * Time.deltaTime); //해당 포인트와 일정이상 가까워지면 나의 부모를 해당 포인트로 하고 //이동해 if (distance > amount) { transform.position += dir.normalized * moveSpeed * Time.deltaTime; } else if (distance <= amount) { //만약 타겟의 차일드 카운트가 0이라면 if (target.childCount <= 0) { //타워를 향해 회전하고 싶다. //다보탑을 향해서 회전하고 싶다. dirForDaboTower = daboTower.transform.position - transform.position; transform.forward = dirForDaboTower.normalized; transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dirForDaboTower.normalized), rotSpeed * Time.deltaTime); float angle = Vector3.SignedAngle(transform.forward, daboTower.transform.position, transform.position); //print(transform.name + " + " + angle); ////다보탑을 바라보고 섰다면 망치질을 시작하고 싶다. if (angle < 0.1f) { transform.SetParent(target); AnimChangeState(StoneWorkMan.Hammering); } else { return; } } //차일드 카운트가 0보다 크다면 //처음부터 다시해 else if (target.childCount > 0) { state = StoneWorkMan.Spread; } } }