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 | 1299 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.
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 #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. 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 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 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 #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. #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 #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. #8 Fik du løst problemet? -- http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO #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.
Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.
Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.
Opret bruger | Login
|
Du skal være logget ind for at tilmelde dig nyhedsbrev.
Hvilken udbyder har du til internet? 230 personer har stemt - Mit energiselskab (Ewii f.eks) 11%
|