NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Neaktivní uživatel:10.10.2017 18:00

Ahoj, jak získat nejbližší charakter z array listu?

namespace Test
{
    using Settings;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
    using UnityEngine;

    internal class Chars : MonoBehaviour
    {
        public static Character LocalCharacter;
        public static HumanController LocalController;
        public static PlayerClient LocalPlayerClient;
        public static UnityEngine.Object[] PlayerOBJs;

        public static System.Collections.Generic.List<Character> GetPlayerList()
        {
            System.Collections.Generic.List<Character> list = new System.Collections.Generic.List<Character>();
            foreach (UnityEngine.Object obj2 in PlayerOBJs)
            {
                if (obj2 != null)
                {
                    Player player = (Player)obj2;
                    if (((player.gameObject != LocalCharacter.gameObject) && (player.playerClient != null)) && (player.alive && !player.dead))
                    {
                        list.Add(player.character);
                    }
                }
            }
            return list;
        }



    }
}
Odpovědět
10.10.2017 18:00
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Marian Benčat:10.10.2017 19:43

Eh :-) Jestli tě správně chápu, tak pod tím vidíš příliš složitý problém..

Jde o hledání minima v poli, kde:

hodnota = rozdilVeVzdale­nosti(a,b);

Jde jen o to, co pro tebe znamená "nejbližší" - pokud ti jde o nejbližší prostě ve 2D/3D prostoru, tak počítáš rozdíl vzdálenosti, což je defakto úhlopříčka ve čtverci (2D) nebo v krychli (3D) :

tedy jde o odmocninu součtu druhých mocnin, jednotlivých rozdílů souřadnic:
http://www.spskarvina.cz/…vou_bodu.pdf

Pokud ovšem chceš počítat ten rozdíl na základě různé mapy a "překážek", tak to minimumu budeš počítat mnohem složitejší funkcí (unity3D má v sobě na todle nějaký pathfinding framework)

"Fuck the math, i will be game programmer"

Editováno 10.10.2017 19:45
Nahoru Odpovědět
10.10.2017 19:43
Totalitní admini..
Avatar
Neaktivní uživatel:10.10.2017 21:43

Mám to na 3D Unity.. A docela v tom vidím problém :D

Nahoru Odpovědět
10.10.2017 21:43
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
D0ll0k:11.10.2017 22:45

Třída Vector3 má statickou metodu Distance, kam se dosazují dvě souřadnice poloh:

float distance = Vector3.Distance(position1, position2);

Jako ekvivalent se taky používá výsledná délka vektorového součtu

float distance = (position1 - position2).magnitude;

Marian Benčat již nahoře zmínil jak se to počítá.

Nahoru Odpovědět
11.10.2017 22:45
Veni, vidi, programmato
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.