public override void StartAction() { isDone = false; actionTimer = actionDelay; actionCount = 0; actions.Clear(); if (item == null) { GameObject stick = ScanForObject.Scan(dog.transform.position, 35f, "Stick", dog.dogLayerMask); if (stick != null) { item = stick.transform; } } if (item != null) { actions.Add(new FollowTarget(dog, item, Vector3.zero, true, 0.2f)); actions.Add(new Grab(dog, item.gameObject)); actions.Add(new FollowTarget(dog, player, player.forward, true, 0.5f)); actions.Add(new Drop(dog)); NextAction(); } else { isDone = true; } }
public override void StartAction() { isDone = false; actionTimer = actionDelay; tree = ScanForObject.Scan(dog.transform.position, 55f, "Tree", dog.dogLayerMask); if (tree != null) { actions.Add(new GotoPosition(dog, tree.transform.position + dog.transform.right)); NextAction(); } else { isDone = true; } }
Vector3 GetPos(float minForward, float maxForward, float minRight, float maxRight, float radius, string tag) { width = startWidth; Vector3 pos = Vector3.zero; Vector3 scanPos = new Vector3(direction.x, 0, direction.z) * Random.Range(minForward, maxForward); scanPos += dog.transform.position; scanPos += GetPerpendicular2DVector(direction) * Random.Range(minRight, maxRight); if (dog.terrain != null) { scanPos.y = dog.terrain.SampleHeight(scanPos); } GameObject obj = ScanForObject.Scan(scanPos, radius, tag, dog.dogLayerMask); if (obj != null) { pos = obj.transform.position; if (Random.Range(0, 100 / dog.sniffPercent) == 0) { dog.isSniffing = true; } //Temporary I guess. width = 1.5f; obj.tag = "Untagged"; } else { pos = scanPos; } NavMeshHit hit; if (NavMesh.SamplePosition(pos, out hit, 3.0f, 1)) { pos = hit.position; } else { pos = path.corners [1]; } //dog.TestWaypoint.position = (pos); return(pos); }