Unity RayCast :)

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Unity RayCast :)

Unread post by bormeth » 10 Apr 2011, 17:05

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.

Neogy
Level 11 - Dark arts intermediate
Posts: 114
Joined: 19 May 2008, 09:10

Re: Unity RayCast :)

Unread post by Neogy » 11 Apr 2011, 00:52

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.

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 11 Apr 2011, 11:33

Prøver jeg da lige senere :D

Neogy
Level 11 - Dark arts intermediate
Posts: 114
Joined: 19 May 2008, 09:10

Re: Unity RayCast :)

Unread post by Neogy » 12 Apr 2011, 09:43

Jeg ville lige lave en opfølgning og høre, fik du det til at virke?

User avatar
vonknut
Level 78 - Basher of noobs
Posts: 823
Joined: 14 Mar 2008, 16:34
Location: CPH

Re: Unity RayCast :)

Unread post by vonknut » 12 Apr 2011, 10:28

Du mangler vel bare at tagge din "ground" som platform :)
Hans von Knut Skovfoged - Creative Dir.
PortaPlay - Interactive Entertainment and Learning

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 12 Apr 2011, 20:07

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 :)

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 12 Apr 2011, 20:08

vonknut og min ground er Layer Platform :)

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 12 Apr 2011, 20:11

Har tjekker om den rigtige LayerID etc er korrekt og er den.. Giver ingen mening :D Men sikker simpel løsning.

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 12 Apr 2011, 21:27

Fik selv rettet det :)

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

Neogy
Level 11 - Dark arts intermediate
Posts: 114
Joined: 19 May 2008, 09:10

Re: Unity RayCast :)

Unread post by Neogy » 12 Apr 2011, 22:31

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?

bormeth
Level 0 - Null
Posts: 9
Joined: 10 Apr 2011, 16:47

Re: Unity RayCast :)

Unread post by bormeth » 13 Apr 2011, 19:34

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..

Post Reply