var targets : List.<Transform>; var selectedTarget : Transform;
function Start () { targets = new List.<Transform>(); selectedTarget = null; AddAllEnemies(); }
function AddAllEnemies() { var go : GameObject[] = GameObject.FindGameObjectsWithTag("2"); for(var enemy : GameObject in go) { AddTarget(enemy.transform); } }
function AddTarget(enemy : Transform) { targets.Add(enemy); } function SortByDistance() { var targets = new Array(); targets.Sort(Comparison); } function Comparison(a : GameObject, b : GameObject) { var a_dist = Vector3.Distance(transform.position, a.transform.position); var b_dist = Vector3.Distance(transform.position, b.transform.position); return a_dist.CompareTo(b_dist); }
function Update () { selectedTarget = targets[0]; }
Добавляет врагов в Таргеты но не фига не распределяет по расстоянию от цели, кто добрый дядя подскажет
Сообщение отредактировал allods - Пятница, 19 Апреля 2013, 22:28
Ну естественно. А что должно меняться? Вы видите что Вы вообще сортируете то? Некий пустой Array targets созданный прямо в функции SortByDistance. А Вам какой надо сортировать? Тот который объявлен вне функций! Вопрос - а нафига вы вообще в SortByDistance новый массив то создаете? ЗЫ: если исправите - обратите внимание, что сортировать массив каждый кадр - это глупо. Сортировать его нужно когда он меняется. В данном случае можно в Start после AddAllEnemies. Ну а в более общем случае в AddTarget
После того как запихнул его в AddTarget я незнаю что тут делать
var targets : List.<Transform>; или var targets = new Array();? как тут мне разобратся?
Если убрать var targets = new Array(); то юнити ругается No appropriate version of 'System.Collections.Generic.List.Sort' for the argument list '(function(UnityEngine.GameObject, UnityEngine.GameObject): int)' was found. Я не пойму что мне надо поменять
1. Убрать var targets = new Array(); 2. targets.Sort(Comparison); заменить на ту, которая есть в List Не знаю JS. Потому не могу написать рабочий вариант на нем. На шарпе нечто
Код
using UnityEngine;
public class Temp : MonoBehaviour { public int Compare(Transform x, Transform y) { float a_dist = Vector3.Distance(transform.position, x.position); float b_dist = Vector3.Distance(transform.position, y.position); return a_dist.CompareTo(b_dist); }