Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V2
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

Check på vektor i Unity C#

Af Semi Supporter Emil_Olesen | 10-10-2014 15:59 | 1169 visninger | 10 svar, hop til seneste
Hej Hol. Jeg har lavet et (meget) lille spil i Unity, ved brug af C# scripts. Jeg har hertil lavet en player controller, så spilleren kan hoppe rundt, og reagere forskelligt på diverse blocks/collisions. Bla. Kan man lave et lille "walljump". Og her kommer så mit spørgsmål: hvordan laver jeg et check på om min X værdi er positiv eller negativ, på en vektor som skal laves mellem min player og væggen som den skal hoppe fra? Dette skal bruges så jeg kan skrive hvis X == positivt Så skal min player skydes mod højre, ellers skal den skydes mod venstre. Jeg vil gøre det sådan, så jeg ikke skal have to væg objekter. Håber det giver mening for andre end mig...
--
Dette indlæg bliver overvåget af NSA.
#1
NitroBlast
Guru
10-10-2014 16:11

Rapporter til Admin
Når du beregner punkters relation til flade objekter feks. vægge, så benyttes væggens plan-ligning hvori punktet indsættes. Men jeg er ikke sikker på, at jeg helt forstår spørgsmålet.
--
http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO
#2
Emil_Olesen
Semi Supporter
10-10-2014 16:15

Rapporter til Admin
#1 kan jeg egentlig godt forstå... Forestil dig en firkantet væg inde midt i min 2D verden. Her kan min player så ramme væggen fra to sider, højre og venstre. Hvis jeg så har en kollision mellem væggen og playeren, vil jeg gerne checke om den er på højre eller venstre side. Min plan er at gøre det via en vektor mellem min player samt væggen. For hvis så X værdien er minus, må min player være på venstre side, og ellers må den være på højre side. Hjalp det med afklaring af mit problem?
--
Dette indlæg bliver overvåget af NSA.
#3
NitroBlast
Guru
10-10-2014 16:32

Rapporter til Admin
Er det ikke blot at tjekke, hvor væggen står, og så se om din spillers position er højere eller lavere end væggens? I 3D beregner du positionen af et punkt i relation til en flade ved at have en flade, der er udgjort af et punkt (P) og en normal (N; retning fladen peger mod) - dette ondannes til et trigonometrisk plan (V): Va = Nx Vb = Ny Vc = Nz Vd = dot(N, P) "dot" er skalarproduktet af N og P. Når du planets 4 værdier, så kan du beregne et punkts relation på følgende måde: PR = Va*Px + Vb*Py + Vc*Pz + Vd Hvis PR = 0 så er punktet P på planet (afstand = 0). Hvis PR < 0 så er punktet bag planet (på den "forkerte" side), og hvis PR > 0 så er punktet foran planet.
--
http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO
#4
thcleaner
Monster Supporter
10-10-2014 16:39

Rapporter til Admin
if (Vector.Lenght(Cector a, Vector b)
--
i5-4570, 8gb ddr3, XFX DD 7970 BE, Qnix QX2700led, Seasonic 760XP2, 240gb samsung840, CoolCube Maxi, BD drev
#5
thcleaner
Monster Supporter
10-10-2014 16:42

Rapporter til Admin
sry der var lidt fejl i if (Vector3.Distance(Vector3 a, Vector3 b)
--
i5-4570, 8gb ddr3, XFX DD 7970 BE, Qnix QX2700led, Seasonic 760XP2, 240gb samsung840, CoolCube Maxi, BD drev
#6
Emil_Olesen
Semi Supporter
10-10-2014 17:03

Rapporter til Admin
#3 Tror bestemt det er sådan noget jeg skal have fat i. Og da det jo er 2d jeg arbejder i, kan jeg vel "blot" smide Vc og Pz væk? #5 Vil da lige prøve det, for det ser da umildbart meget simpelt ud :) Hvordan sætter jeg så min player til at være punkt a, og min væg til at være b? Er lidt noob på området...
--
Dette indlæg bliver overvåget af NSA.
#7
NitroBlast
Guru
10-10-2014 17:18

Rapporter til Admin
#6 Jeg kender intet til Unity, men har programmeret en del i Direct3D (DirectX). Du kan ikke umiddelbart smide noget væk, men du kan erstatte det med konstanter. Det er muligt at Vector3.Distance er vejen frem for dig, men hvis væggen er stationær, så vil der blive spildt regnekraft på at lave en unødig beregning hver gang afstanden skal beregnes.
--
http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO
#8
Emil_Olesen
Supporter
10-10-2014 17:24

Rapporter til Admin
#7 Unity har en vector3 funktion og en vector2 funktion, så den placerer selv konstaner ved brug af en vector2. Selve væggen bliver konstant, men den bliver oprettet som et objekt, som kan bruges flere steder, så det bliver derfor ikke det samme sted den står altid (da der godt kan være mere en en væg i dette tilfælde).
--
Dette indlæg bliver overvåget af NSA.
#9
NitroBlast
Guru
11-10-2014 15:06

Rapporter til Admin
#8 Fik du løst problemet?
--
http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO
#10
Emil_Olesen
Supporter
11-10-2014 16:17

Rapporter til Admin
#9 Da jeg skrev sad jeg i toget på vej til mine forældre, så har ikke fået kigget på det endnu. Det bliver nok først mandag eller tirsdag, men skal nok skrive her hvis det virker:) Tak skal i have
--
Dette indlæg bliver overvåget af NSA.

Opret svar til indlægget: Check på vektor i Unity C#

Grundet øget spam aktivitet fra udlandet, er det desværre ikke muligt for dig, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning