// Update is called once per frame void Update() { // 點擊 if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { if (hit.transform.name == _pet.name) { touchPet(); } else if (hit.transform.name == "Plane") { touchPlane(); } } } if (nowPetState != nextPetState) { nowPetState = nextPetState; AI(); } if (_petNav.remainingDistance <= _petNav.stoppingDistance && !_petNav.pathPending && nowPetState != _petState.touch) { nextPetState = _petState.idle; } }
//============================================== //================= 寵物行為 ===================== //============================================== private IEnumerator IdleTime(float time) { setAnimatorSpeed("speed", 0f); yield return(new WaitForSeconds(time)); nextPetState = _petState.walk; }
private IEnumerator TouchTime(float time) { // 停止移動 setAnimatorSpeed("speed", 0f); _petAni.SetBool("touch", true); yield return(new WaitForSeconds(time)); _petAni.SetBool("touch", false); nextPetState = _petState.idle; }
// Start is called before the first frame update void Start() { nowPetState = _petState.idle; if (_pet == null) { _pet = this.gameObject; } if (_petAni == null) { _petAni = _pet.GetComponent <Animator>(); } if (_petNav == null) { _petNav = _pet.GetComponent <NavMeshAgent>(); } AI(); }
// 玩家點擊地面用 public void touchPlane() { nextPetState = _petState.run; }
// 玩家點擊寵物用 public void touchPet() { nextPetState = _petState.touch; }