Page 1 of 1

Unity RayCast :)

Posted: 10 Apr 2011, 17:05
by bormeth
Ved ikke om der er nogle der ved det men søger pt. løsning på et problem jeg har.


Sådan her ser koden ud

Code: Select all

int layerID = LayerMask.NameToLayer("Platform");
        if (!Physics.Raycast(transform.position, -Vector3.up, 0.8f) || !Physics.Raycast(transform.position, Vector3.forward, 0.8f, layerID))
        {
            switch (state)
            {
                case State.Left:
                    state = State.Right;
                    break;
                case State.Right:
                    state = State.Left;
                    break;           
            }
        }

        if (state == State.Right)
        {
            transform.Translate(Vector3.right * amtToMove);
        }
        else if (state == State.Left)
        {
            transform.Translate(Vector3.left * amtToMove);

        }
Problemet er bare at koden ser ud som om den får mine enemies til at skifte retning pr. FPS og ikke kun når der er noget foran dem.

Re: Unity RayCast :)

Posted: 11 Apr 2011, 00:52
by Neogy
Hvis jeg forstår din kode rigtigt så for at den skal gå ind i din IF sætning så enten

1. hvis der ikke er noget under en enemy (hvis en fjende prøver at gå ud over en kant tænker jeg ?)

2. når der ikke der ikke er noget foran den i som tilhører layerID.

Den sidste layerID er platform, jeg ved ikke om du mener selve verdenen, men hvis den skal skifte hver gang der ikke
er nogen fra platforms layeret foran den så skifter den vel konstant som du siger.

Jeg tror du skal fjerne ! fra nummer 2, så dine enemies skifter retning hvis der ER noget af platform layeret foran den. Hvis det skal
bruges til at de skal dreje når de er ved at gå ind i en væg.

Det er ihvertfald sådan jeg læser det.

Re: Unity RayCast :)

Posted: 11 Apr 2011, 11:33
by bormeth
Prøver jeg da lige senere :D

Re: Unity RayCast :)

Posted: 12 Apr 2011, 09:43
by Neogy
Jeg ville lige lave en opfølgning og høre, fik du det til at virke?

Re: Unity RayCast :)

Posted: 12 Apr 2011, 10:28
by vonknut
Du mangler vel bare at tagge din "ground" som platform :)

Re: Unity RayCast :)

Posted: 12 Apr 2011, 20:07
by bormeth
Er hermed prøvet i ligende kode

Code: Select all

   if (Physics.Raycast(transform.position, Vector3.forward, 0.8f, layerID))
        {
            switch (state)
            {
                case State.Left:
                    state = State.Right;
                    break;
                case State.Right:
                    state = State.Left;
                    break;           
            }
        }
Virkede desværre ikke :)

Re: Unity RayCast :)

Posted: 12 Apr 2011, 20:08
by bormeth
vonknut og min ground er Layer Platform :)

Re: Unity RayCast :)

Posted: 12 Apr 2011, 20:11
by bormeth
Har tjekker om den rigtige LayerID etc er korrekt og er den.. Giver ingen mening :D Men sikker simpel løsning.

Re: Unity RayCast :)

Posted: 12 Apr 2011, 21:27
by bormeth
Fik selv rettet det :)

manglede 1 << layerID ;) Så det er en bit mask.

Re: Unity RayCast :)

Posted: 12 Apr 2011, 22:31
by Neogy
Jeg mente ikke at du skulle fjerne den første condition fra din if sætning, men fedt at du har fået løst det.
Kan du forklare hvorfor du vil se om der ikke er noget fra platformslayeret foran dine enemies?
Ville have troet du brugte det til at få dine enemies til at holde sig inde for et afgrænset område, eller tager jeg fejl?

Re: Unity RayCast :)

Posted: 13 Apr 2011, 19:34
by bormeth
Neogy det er simpelthen fordi det er noget Mario look alike (2D) :) Så kan jo ikke hjælpe de vader gennem platforms etc :D
hehe..

Der virker lidt stille her på siden ellers smart koncept!! :) Skal nok holde jer opdateret..