public static ObjectToHit FindClosestTarget(Transform viewer, float radius, float fieldOfViewRange, ObjectToHit viewerObject) { List <ObjectToHit> allTargets = TargetsManager.FindTargetsInRadius(viewer.position, radius); Dictionary <ObjectToHit, Vector2> possibleTargets = new Dictionary <ObjectToHit, Vector2>(); //object, Vector2(distance, angle) foreach (ObjectToHit target in allTargets) { // RaycastHit hit; Vector3 rayDirection = target.transform.position - viewer.position; //??? float angle = Vector3.Angle(rayDirection, viewer.forward); if (angle < fieldOfViewRange) { RaycastHit[] hits = Physics.RaycastAll(viewer.position, rayDirection); // if (Physics.RaycastAll(viewer.position, rayDirection, out hit)) foreach (RaycastHit hit in hits) { ObjectToHit obj = hit.transform.GetComponent <ObjectToHit>(); if (obj == target && obj != viewerObject && !possibleTargets.ContainsKey(target)) { //This is possible target possibleTargets.Add(target, new Vector2(Vector3.Distance(viewer.position, target.center.position), angle)); } else { //Target behind the obstancle // return false; } } } } return(GetBestMatch(possibleTargets)); }
// Use this for initialization void Start() { targetsManager = GameObject.Find("TargetsManager").GetComponent <TargetsManager>(); if (targetsManager == null) { Debug.Log("Cannot find targetsManager!"); } }
void Update() { if (NeedToFindNewTarget()) { ObjectToHit nearestTarget = TargetsManager.GetNearestTarget(thisObjectToHit, visibleRadius); target = nearestTarget; // characterControl.SetTarget(target.transform); } // if (target == null) // { // ObjectToHit nearestTarget = TargetsManager.GetNearestTarget(thisObjectToHit, visibleRadius); // if (nearestTarget != null) // { // target = nearestTarget; // } // } if (target != null) { agent.SetDestination(target.transform.position); if (agent.remainingDistance < focusDistance) { movementController.FocusOnTarget(target.transform); } else if (movementController.target != null) { movementController.Unfocus(); } // float distance = Vector3.Distance(transform.position, target.transform.position); if (agent.remainingDistance > agent.stoppingDistance) // if (distance > distanceToHit) { Vector3 direction = target.transform.position - transform.position; movementController.Move(direction, false, true); swordController.Run(); swordController.StopHit(); } else if (agent.velocity.magnitude < velocityToHit) { movementController.Stop(); swordController.Stop(); swordController.DoHit(); } } }
private void OnLoadCompleted(Dictionary <string, GameObject> anchorIdToObject) { foreach (string anchorId in anchorIdToObject.Keys) { int columnNum = TargetsManager.GetColumnNumberFromColumnName(anchorId) + 1; GameObject columnObj; if (anchorIdToObject.TryGetValue(anchorId, out columnObj)) { panelNumberToObject.Add(columnNum, columnObj.transform.GetChild(0).gameObject); columnObj.transform.GetChild(0).gameObject.GetComponent <AppPanel>().SetPanelNumber(columnNum); panelNumberToObject.Add(columnNum + Commons.numPanelsPerRow, columnObj.transform.GetChild(1).gameObject); columnObj.transform.GetChild(1).gameObject.GetComponent <AppPanel>().SetPanelNumber(columnNum + Commons.numPanelsPerRow); panelNumberToObject.Add(columnNum + Commons.numPanelsPerRow * 2, columnObj.transform.GetChild(2).gameObject); columnObj.transform.GetChild(2).gameObject.GetComponent <AppPanel>().SetPanelNumber(columnNum + Commons.numPanelsPerRow * 2); panelNumberToObject.Add(columnNum + Commons.numPanelsPerRow * 3, columnObj.transform.GetChild(3).gameObject); columnObj.transform.GetChild(3).gameObject.GetComponent <AppPanel>().SetPanelNumber(columnNum + Commons.numPanelsPerRow * 3); } } }
private void UpdateTargets() { _targets.Add(TargetsManager.CreateTarget()); _targets.Last().TargetGameObject = Instantiate(_targets.Last().TargetGameObject); _targets.Last().TargetGameObject.transform.SetParent(ParentTarget.transform); }
void OnEnable() { TargetsManager.AddTarget(this); }
void OnDisable() { TargetsManager.RemoveTarget(this); }
// Use this for initialization void Start() { targetsManager = GameObject.Find("TargetsManager").GetComponent <TargetsManager>(); }