Skocz do zawartości
gu2ma

"unity" - Robimy platformówkę

Polecane posty

Ja mam inne pytanie jak określić obszar poziomu? Nawet jak ustalam obszar kamery (taka szara ramka) i tło podłożę troche dalej to i tak w grze po dojściu do krawędzi mam niebieski obszar, gdzie można wypaść. Rozwiązanie to ułożenie belek dookoła, ale nie wiem czy najlepsze...

Skończyłem drugą część i w sumie działa tylko czasem moja postać lubi wystrzelić do góry :>.

Edytowano przez jmk
Link do komentarza
Udostępnij na innych stronach

@ThePolishAssasin - tłem może być każdy obraz o odpowiednio dużej rozdzielczości w stosunku do wielkości Twojej planszy. Na początek najlepiej stworzyć coś prostego.

jak można zauważyć jest to samo tło tylko odwrócone i połączone w całość przy pomocy strzałek klawiatury

@ Rasowy utwórz nową pracę i spróbuj zrobić to na czysto wtedy okaże się czy wszystko masz pobrane

@ jmk - cytuję - "Ja mam inne pytanie jak określić obszar poziomu?" Obecnie musisz stworzyć dość duże tło. Zapraszam do obejrzenia mojego materiału. >>>

<<<
Link do komentarza
Udostępnij na innych stronach

Mój niebieski kulek skacze odbijając się od powietrza, mimo, że przepisałem kod z ramki. Kod wygląda tak:


using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour
{

private Rigidbody2D m_Rigidbody;

private bool m_Grounded = false;
public float m_Speed=10;
public float m_JumpForce=35;

public GameObject m_Target;

// Use this for initialization
void Start () {
m_Rigidbody = GetComponent<Rigidbody2D>()as Rigidbody2D;

}

// Update is called once per frame
void Update ()
{
}

void OnTriggerEnter2D(Collider2D other)
{
m_Grounded = true;
}

void OntriggerExit2D(Collider2D other)
{
m_Grounded = false;
}

void FixedUpdate()
{
if(Input.GetButton("Horizontal"))
{
m_Rigidbody.velocity=new Vector2(Input.GetAxis ("Horizontal")*m_Speed, m_Rigidbody.velocity.y);

}
if(Input.GetButton("Jump")&& m_Grounded==true)
{
m_Rigidbody.AddForce(new Vector2(0,Input.GetAxis("Jump")*m_JumpForce));
}

}

}


}

// Update is called once per frame
void Update ()
{
}

void OnTriggerEnter2D(Collider2D other)
{
m_Grouded = true;
}

void OntriggerExit2D(Collider2D other)
{
m_Grouded = false;
}

void FixedUpdate()
{
if(Input.GetButton("Horizontal"))
{
m_Rigidbody.velocity=new Vector2(Input.GetAxis ("Horizontal")*m_Speed, m_Rigidbody.velocity.y);

}
if(Input.GetButton("Jump")&& m_Grouded==true)
{
m_Rigidbody.AddForce(new Vector2(0,Input.GetAxis("Jump")*m_JumpForce));
}

}

}

Jak widać próbowałem w warunku dać Grounded==true ale to nic nie dało.

Tak wyglądają hitboxy(te ramki do wykrywania kolizji) i parametry.

Ten boxColider od skakania nachodzi na kulka, i myślałem, że może, choć nie powinno, ale może klasyfikuje jego samego jako obiekt od którego się odbija, więc zmieniłem go tak, żeby się nawet nie stykały, ale to nic nie dało.

O co chodzi?

m5kfcqT.jpg

Link do komentarza
Udostępnij na innych stronach

Mam problem dotyczący Visual Studio. Otóż dzisiaj wyskoczyło mi w nim powiadomienie, że moja licencja trial dzisiaj wygasa. Jaki trial?! To nie miała być czasem w pełni darmowa wersja? W razie czego, jest jakiś sposób, aby pozbyć się wszystkich śmieci które zostawia ze sobą Visual Studio, w razie gdybym chciał go przeinstalować/odinstalować? I tak, na pewno mam zainstalowaną wersję Community.

Problem nr 2: zacząłem kurs od początku i nadal nie mogę zmusić swojego knypka do skoku. Oto mój kod:

using UnityEngine;

using System.Collections;

public class PlayerMovement : MonoBehaviour {

private Rigidbody2D m_Rigidbody;

public float m_Speed = 10;

public float m_JumpForce = 100;

// Use this for initialization

void Start () {

m_Rigidbody = GetComponent<Rigidbody2D>();

}

// Update is called once per frame

void Update () {

}

void FixedUpdate ()

{

if(Input.GetButton("Horizontal"))

{

m_Rigidbody.velocity = new Vector2(Input.GetAxis("Horizontal") * m_Speed, m_Rigidbody.velocity.y);

}

if(Input.GetButton("Jump"))

{

m_Rigidbody.AddForce(new Vector2(0, Input.GetAxis("Jump") * m_JumpForce));

}

}

}

Próbowałem wcześniej wymienionych sposobów, jednakże sprawiają one że moja postać przenika przez platformę. Mam nadzieję, że pomożecie, bo mimo mojego zapału do programowania już mi się odechciewa szukania tej jednej rzeczy, która nie działa...

Edytowano przez anok98
Link do komentarza
Udostępnij na innych stronach

Skopiowałem twój kod do mnie i skompilowałem. Działa, kulek skacze w kosmos. Sprawdź klawisze sterowania, zwiększ wysokość skoku.

Ja mam problem również. Tym razem z game controlerem.

using UnityEngine.SceneManagement; <<Nazwa typu lub obszaru nazw SceneMenagment nie istnieje w obszarze naw Unity (czy nie brakuje odwołania do zestawu?)>>

Właśnie taki komunikat otrzymuję.

Edytowano przez nortalf
Link do komentarza
Udostępnij na innych stronach

Użytkowniku @anok98 wyraze o kolorze czerwonym prosze dopisać do swojego skryptu.

using UnityEngine;

using System.Collections;

public class PlayerMovement : MonoBehaviour {

private Rigidbody2D m_Rigidbody;

private bool m_Grounded = false;

public float m_Speed = 10;

public float m_JumpForce = 100;

// Use this for initialization

void Start () {

m_Rigidbody = GetComponent<Rigidbody2D>() as Rigidbody2D;

}

// Update is called once per frame

void Update () {

}

void OnTriggerEnter2D(Collider2D other)

{

m_Grounded = true;

}

void OnTriggerExit2D(Collider2D other)

{

m_Grounded = false;

}

void FixedUpdate ()

{

if(Input.GetButton("Horizontal"))

{

m_Rigidbody.velocity = new Vector2(Input.GetAxis("Horizontal") * m_Speed, m_Rigidbody.velocity.y);

}

if(Input.GetButton("Jump"))usuń ten nawias && m_Grounded)

{

m_Rigidbody.AddForce(new Vector2(0, Input.GetAxis("Jump") * m_JumpForce));

}

}

}

------------------------------------------------------------------------------------------------------------------------------------

Użytkowniku @nortalf napisz nam kod proszę.

Link do komentarza
Udostępnij na innych stronach

Odzywają się tutaj może panowie prowadzący kurs?

Mam takie pytanie jakie są różnice, gdy kod na wykrywanie "ziemi" wygląda tak:

void OnTriggerEnter2D(Collider2D other)

{

m_Grounded = true;

}

void OnTriggerExit2D(Collider2D other)

{

m_Grounded = false;

}

a ja stosuję objekt groundcheck i radiusy jak w tym tutorialu:

Youtube Video -> Oryginalne wideo
Link do komentarza
Udostępnij na innych stronach

@jmk poproszę o skrypt dotyczący "wroga"

 

6 godzin temu, jmk napisał:

Tak samo amunicja jak się skończy i zbiorę to muszę przeładować - to normalne?

Jak najbardziej normalne. Powiedzmy taki Mass Effect 2 - opróżnij cały magazynek i po zebraniu amunicji musisz najpierw ją załadować. 

Link do komentarza
Udostępnij na innych stronach

Mój skrypt:


 

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour
{
    public int m_Health = 3;
    public float m_JumpCooldown = 4;
    public float m_JumpForce = 350;
    private float m_CurrentJumpTime = 0;
    private Rigidbody2D m_Rigidbody;


    // Use this for initialization
    void Start()
    {

        m_Rigidbody = GetComponent<Rigidbody2D>() as Rigidbody2D;

    }

    // Update is called once per frame
    void Update()
    {

        if (m_CurrentJumpTime >= m_JumpCooldown)
        {
            m_Rigidbody.AddForce(new Vector2(0, m_JumpForce));
            m_CurrentJumpTime = 0;
        }

        m_CurrentJumpTime += Time.deltaTime;
    }

    void OnCollisionEnter2D(Collision2D coll)
    {
        Bullet bullet = coll.collider.GetComponent<Bullet>() as Bullet;

        if (bullet != null)
        {
            m_Health--;

            if (m_Health <= 0)
            {
                Destroy(gameObject);

            }
        }

    }
}

 

 

Naprawiłem, działa ;).

Edytowano przez jmk
Link do komentarza
Udostępnij na innych stronach

Cześć 

Mam pewien problem ponieważ mój bohater nie chce przejść na 2 poziom .

Przepisałem skrypt z CD Action i nic tak samo ze strony...

Ktoś może wie w czym problem ?

I moje 2 pytanie jak dodać tło  aby nie zasłaniało platform , bohatera? 

Edytowano przez PolskiStig
Link do komentarza
Udostępnij na innych stronach

@PolskiStig   poprosimy o skrypt w całej swojej okazałości.

Na pierwszej lekcji uczyliśmy się dodawania kolejności warstw. (ramka)  Inspector >>> Sorting Layer

Edytowano przez gu2ma
Link do komentarza
Udostępnij na innych stronach

@PolskiStig

Ostatnia linijka : Ty masz napisane NextLevel   spróbuj napisać tak: Nextlevel    , "level" z małej litery.

 

PS Sprawdziłem to na swoim projekcie. Zmień wielkość literki "l' i wszystko będzie dobrze. Pamiętaj aby zwracać uwagę na podkreślone wyrazy - to oznacza, że jest coś nie tak. 

Link do komentarza
Udostępnij na innych stronach

Witam, mam taki sam problem jaki ma PolskiStig. Niestety zamienienie "L" na "l" nie pomaga.

Skrypt Exit:

using UnityEngine;
using System.Collections;
public class Exit : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.name == "Player")
        {
            GameController.Nextlevel();
        }
    }
}

W razie czego skrypt GameController:

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class GameController : MonoBehaviour
{

    private static GameController m_Instance;

    void Start()
    {
        if (m_Instance == null)
        {
            m_Instance = this;
        }
        else {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(gameObject);
    }

    void Update()
    {
        if (Input.GetButton("Cancel"))
        {
            Application.Quit();
        }
    }

    public static void Nextlevel()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
}
 

56f96a83bc8e3_Beztytuu.thumb.jpg.7b8a1d1

Link do komentarza
Udostępnij na innych stronach

Przez ten błąd dalej nie robiłem więc mam tylko PlayerMovement:

 

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour{
     private Rigidbody2D m_Rigidbody;
     private bool m_Grounded = false;
     public float m_Speed = 15;
     public float m_JumpForce = 400;
     // Use this for initialization
     void Start(){
          m_Rigidbody = GetComponent<Rigidbody2D>()as Rigidbody2D;
     }

     // Update is called once per frame
     void Update(){
     }
     void OnTriggerEnter2D(Collider2D other){
          m_Grounded=true;
     }
     void OnTriggerExit2D(Collider2D other){
          m_Grounded=false;
     }

     void FixedUpdate()
     {
         if (Input.GetButton("Horizontal"))
         {
             m_Rigidbody.velocity = new Vector2(Input.GetAxis("Horizontal") * m_Speed, m_Rigidbody.velocity.y);
         }

         if (Input.GetButton("Jump")&& m_Grounded)
         {
             m_Rigidbody.AddForce(new Vector2(0, Input.GetAxis("Jump") * m_JumpForce));
         }

     }
 }

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wklejony jako tekst z formatowaniem.   Wklej jako zwykły tekst

  Maksymalna ilość emotikon wynosi 75.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...