Skocz do zawartości
gu2ma

"unity" - Robimy platformówkę

Polecane posty

Witam.

Mam poważny problem z 4 częścią poradnika. Mój wróg z nieznanego mi powodu buguje się przy waypoincie (tzn. trzęsie się i nie idzie dalej). Wszystkie skrypty przekopiowałem ze strony i wykonałem wszystkie kroki poradnika. Proszę o pomoc.

gra.bug.jpg

Link do komentarza
Udostępnij na innych stronach

Dnia 2.05.2016 o 17:40, gu2ma napisał:

@jmk mam dzisiaj trochę wolnego czasu, mogę Ci spróbować pomóc. Tylko musielibyśmy porozmawiać na skype. Jeżeli Ty znajdziesz czas, odpisz mi w wiadomości prywatnej z swoim nickiem skype. Pozdrawiam. 

 

Dzięki, wolałbym jednak w formie pisanej. Pracuję bardzo nieregularnie i sporo, ciężko mi umówić się na konkretne godziny.

  • Upvote 1
Link do komentarza
Udostępnij na innych stronach

@jmk Muszę poprosić Cię o cały projekt. "Przed wysłaniem pracy zmień jedną rzecz w nim. Wejdź do menu Edit -> Project Settings -> Editor i w oknie Inspectora Version Control Mode z Hidden Meta Files na Visible Meta fFles.

Projekt polecam wrzucić na www.dropbox.com."

 

PS Jeżeli z tym też masz problem. Poproszę Cię o zrzut tego drugiego błędu, bo miałeś chyba 2?  

Link do komentarza
Udostępnij na innych stronach

Napisano (edytowany)

Kolejny materiał wideo z kursu już niebawem. 13-14-15 maja to dni w których zabiorę się za wykonanie kolejnych kroków podanych w czasopiśmie. 

 

Obecna <<playlista<<

 

edit: Wynikły pewne nieoczekiwane problemy. Musze skontaktować się z  twórcą poradnika. Mam nadzieję, że pozwoli mi to ukończyć swoją pracę. 

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

To Ja mam pytanie dotyczące pierwszej części kursu. Zrobiłem platformę, bohatera, dałem im kolizje itp., jednak problem pojawił się przy podłączaniu postaci do kamery - Wszystko kompletnie znika, pozostawiając jedynie domyślne tło (którego nie zmieniałem). Wiem jednak, że sterowanie działa, co można poznać po zmieniających się współrzędnych kamery. Sprawdziłem, czy dobrze zakodowałem postać, kamerę, ale żadnego błędu nie wykryłem. Ktoś ma pomysł, co robię źle?

Link do komentarza
Udostępnij na innych stronach

@CaptainPorpoise to ja Ci dziękuję za Twoje zaangażowanie. Powodzenia w szkole! 

PS Jeżeli chcesz komuś wysłać projekt zapisz go w innym miejscu. Dlaczego? Po stworzeniu programu (gry - plik .exe) zawartość folderu zwiększa się diametralnie. Później zostaje jeszcze "spakowanie" przy pomocy programu WinRAR i otrzymamy plik miły dla oka. Polecam serwis Dropbox (w celu zamieszczenia swojej pracy). 

Gorąco pozdrawiam, Sebastian. 

  • Upvote 1
Link do komentarza
Udostępnij na innych stronach

16 godzin temu, gu2ma napisał:

Wszystko znika po uruchomieniu programu?  

Tak. Kiedy uruchamiam grę przez przycisk "Play" u góry ekranu, to zarówno postać jak i platforma na której powinna ona lądować, znika.

Link do komentarza
Udostępnij na innych stronach

Witam (tak znów ja) mam problem co do fragmentu skryptu Enemy z 5 części poradnika. Visal Studio podkreśla mi dużo fragmentów kodu jako błąd. Wszystko jest na screen'ach, które przesyłam:

błędy skryptu enemy.png

błędy skryptu enemy lista error.png

Proszę o pomoc nie długo też chcę zaprezentować to w szkole. 

Link do komentarza
Udostępnij na innych stronach

@pejter powiedz mi, a dodałeś do każdej rzeczy typu: postać, tło, platforma - osobną warstwę? (Sorting Layer)

@Kubowski  zauważylem, że masz pewne braki, jeżeli do tej pory robiłeś wszystko zgodnie z instrukcjami podanymi w czasopiśmie mój kod powinien Ci pomóc - oczywiście najpierw skopiuj i zapisz swoją treść! 

 

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Enemy : MonoBehaviour
{
    public int m_Health = 3;
    public float m_JumpForce = 350;
    public List<WayPoint> m_WayPoints;
    public float m_Speed = 5;
    public float m_SnapDistance = 0.4f;
    public GameObject m_Target;
    public float m_TargetDistance = 3;
    public JumpPoint m_JumpPoint;

    private Animator m_Animator;
    private bool m_InAir;
    private float m_WayPointTime = 0;
    private float m_CurrentWayPointTime = 0;
    private int m_CurrentWayPointIndex = 0;
    private bool m_DestinationReached = false;
    private Rigidbody2D m_Rigidbody;

    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody2D>() as Rigidbody2D;
        m_Animator = GetComponent<Animator>()as Animator;
    }

    void Update()
    {

        if (m_Rigidbody != null)
        {
            if (m_Rigidbody.velocity.y != 0)
            {
                m_InAir = true;
            }
            else
            {
                m_InAir = false;
            }

            if (m_Animator != null)
            
                if (m_Rigidbody.velocity.y != 0)
                {
                    m_Animator.Play("Jump");
                }
                else {
                    if (m_Rigidbody.velocity.x != 0)
                    {
                        m_Animator.Play("Walk");
                    }
                    else if (m_Rigidbody.velocity.x == 0)
                    {
                        m_Animator.Play("Idle");

                    }
            }
        }

if (m_Target == null)
        {
            if (!m_DestinationReached)
            {
                if (Vector3.Distance(transform.position, m_WayPoints[m_CurrentWayPointIndex].transform.position) > m_SnapDistance)
                {
                    Follow(m_WayPoints[m_CurrentWayPointIndex].gameObject);
                
                }
                else {
                    m_Rigidbody.position = m_WayPoints[m_CurrentWayPointIndex].transform.position;
                    m_WayPointTime = m_WayPoints[m_CurrentWayPointIndex].m_WaitTime;
                    m_DestinationReached = true;
                    m_CurrentWayPointIndex = (++m_CurrentWayPointIndex) % m_WayPoints.Count;
                    m_Rigidbody.velocity = Vector3.zero;
                }
            }
            else {
                m_CurrentWayPointTime += Time.deltaTime;

                if (m_CurrentWayPointTime >= m_WayPointTime)
                {
                    m_CurrentWayPointTime = 0;
                    m_DestinationReached = false;
                }
            }
        }
        else {
            if (Vector3.Distance(transform.position, m_Target.transform.position) > m_TargetDistance)
            {
              Follow(m_Target);
            }
            
            }
        }
   

    void Follow(GameObject target)
    {
        Vector2 direction = target.transform.position - transform.position;
        direction.Normalize();

        float targetY = target.transform.position.y;

        if (target.GetComponent<BoxCollider2D>() != null)
        {
            targetY = target.GetComponent<BoxCollider2D>().bounds.min.y;

        }

        float enemyY = gameObject.GetComponent<BoxCollider2D>().bounds.min.y;
        float diff = Mathf.Abs(targetY - enemyY);

        if (!m_InAir)
        {
            if (m_JumpPoint != null && diff > 0.1f)
            {
                Vector3 velocity = Vector3.zero;

                if (m_JumpPoint.m_Up != null && direction.y > 0)
                {
                    velocity = m_JumpPoint.m_Up.transform.position - transform.position;
                    velocity = new Vector3(velocity.x, velocity.y * m_JumpForce * 2, velocity.z);

                }
                else if (m_JumpPoint.m_Down != null && direction.y < 0)
                {
                    velocity = m_JumpPoint.m_Down.transform.position - transform.position;
                    velocity = new Vector3(velocity.x * m_JumpForce, -velocity.y * m_JumpForce, velocity.z);
                }

                m_Rigidbody.velocity = velocity;
            }
            else
            {
                m_Rigidbody.velocity = new Vector2(direction.x * m_Speed, m_Rigidbody.velocity.y);
            }
        }
    }

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

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

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

    void OnTriggerEnter2D(Collider2D other)
    {
        PlayerMovement player = other.GetComponent<PlayerMovement>();

        if (player != null)
        {
            m_Target = player.gameObject;
        }
    }

    void OnTriggerExit2D(Collider2D other)
    {
        PlayerMovement player = other.GetComponent<PlayerMovement>();

        if (player != null)
        {
            m_Target = null;
        }
    }
}

  • Upvote 1
Link do komentarza
Udostępnij na innych stronach

Póki co działa. Dzięki po raz kolejny dokończę 5 część i w razie czego to napisze gdybym miał kolejny problem.

 

P.S. Z collider'ów da się zrobić trampolinę (nawet z tych które mają zaznaczone "Is Trigger") wystarczy na granicy collider'a wcisnąć klawisz od skoku może to spowodować wyrzucenie za mapę dlatego zrobiłem "niewidzialny dach" na górze poziomu. :) 

  • Upvote 1
Link do komentarza
Udostępnij na innych stronach

Mam problem. Jestem właśnie na części 3, tworzeniu broni. Po tym jak utworzyłem skrypt Weapon i Bullet i wpisałem w nich wszystkie skrypty powstaje błąd. Otóż moja postać sama z siebie strzela bez wciśnięcia przycisku i w dodatku strzela cały czas. Załączam screeny skryptu Weapon i ustawień klawiszowych dla Fire1.

error.png

error 2.png

Link do komentarza
Udostępnij na innych stronach

Cytat

pejter powiedz mi, a dodałeś do każdej rzeczy typu: postać, tło, platforma - osobną warstwę? (Sorting Layer)

@gu2ma Tła nie ruszałem w ogóle. Na początku wszystko miało domyślną warstwę. Po twoim poście poeksperymentowałem z tymi warstwami i ich kolejnością. Niestety bez rezultatów. Jedyne co udało mi się odkryć, to że po spauzowaniu gry widać, że bohater wylądował na platformie, a kamera "leży na nim".

Link do komentarza
Udostępnij na innych stronach

@pejter w pliku: Main Camera masz dodany skrypt: CameraFollow, a w polu target: Player

@BigRedChick  masz błąd w skrypcie. Po: " m_CurrentMagazineAmount--; " - końcówka skryptu 

USUŃ WSZYSTKO! i wklej to:

 

}

    } 
    public void AddBulets(int amount)
    {
        m_CurrentAmmoAmount =
            Mathf.Clamp(m_CurrentAmmoAmount + amount, 0,
            m_MaxAmmo);
    }
        
}

 

Powinno pomóc. Pozdrawiam, Sebastian

Jakbyś miał problemy @BigRedChick oto cały poprawnie napisany skrypt WEAPON:

 

using UnityEngine;
using System.Collections;

public class Weapon:MonoBehaviour {
    public GameObject m_Bullet;
    public Transform m_BulletSpawnPoint;
    public int m_MagazineCapacity = 10;
    public int m_MaxAmmo = 30;

    private int m_CurrentAmmoAmount;
    private int m_CurrentMagazineAmount;

    // Use this for initialization
    void Start() {
        m_CurrentMagazineAmount = m_MagazineCapacity;
        m_CurrentAmmoAmount = m_MaxAmmo;

    }

    // Update is called once per frame
    void Update() {
        if (Input.GetButtonDown("Reload"))
        {
            int bulletsToAdd =
                m_MagazineCapacity - m_CurrentMagazineAmount;

            if (m_CurrentAmmoAmount < bulletsToAdd)
            {
                bulletsToAdd = m_CurrentAmmoAmount;
            }
            m_CurrentAmmoAmount-= bulletsToAdd;
            m_CurrentMagazineAmount += bulletsToAdd;
        }
        if (Input.GetButtonDown("Fire1") && m_CurrentMagazineAmount > 0){
            Instantiate(m_Bullet, m_BulletSpawnPoint.position,
                m_BulletSpawnPoint.rotation);
            m_CurrentMagazineAmount--;

        }

    } 
    public void AddBulets(int amount)
    {
        m_CurrentAmmoAmount =
            Mathf.Clamp(m_CurrentAmmoAmount + amount, 0,
            m_MaxAmmo);
    }
        
}

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

@pejter znajdziesz jutro czas? Pogadalibyśmy przez wideo konferencję skype. 

 

@BigRedChick

Skrypt Bullet:

 

using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour
{
    public float m_Speed = 10;
    public float m_LifeTime = 5;
    private Rigidbody2D m_Rigidbody;

    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody2D>() as Rigidbody2D;
        m_Rigidbody.velocity = new Vector2(m_Speed * transform.right.x, 0);

        Destroy(gameObject, m_LifeTime);
    }

    void OnCollisionEnter2D(Collision2D coll)
    {
        Destroy(gameObject);
    }

 

 

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

Skrypt Weapon

 

using UnityEngine;
using System.Collections;

public class Weapon:MonoBehaviour {
    public GameObject m_Bullet;
    public Transform m_BulletSpawnPoint;
    public int m_MagazineCapacity = 10;
    public int m_MaxAmmo = 30;

    private int m_CurrentAmmoAmount;
    private int m_CurrentMagazineAmount;

    // Use this for initialization
    void Start() {
        m_CurrentMagazineAmount = m_MagazineCapacity;
        m_CurrentAmmoAmount = m_MaxAmmo;

    }

    // Update is called once per frame
    void Update() {
        if (Input.GetButtonDown("Reload"))
        {
            int bulletsToAdd =
                m_MagazineCapacity - m_CurrentMagazineAmount;

            if (m_CurrentAmmoAmount < bulletsToAdd)
            {
                bulletsToAdd = m_CurrentAmmoAmount;
            }
            m_CurrentAmmoAmount-= bulletsToAdd;
            m_CurrentMagazineAmount += bulletsToAdd;
        }
        if (Input.GetButtonDown("Fire1") && m_CurrentMagazineAmount > 0){
            Instantiate(m_Bullet, m_BulletSpawnPoint.position,
                m_BulletSpawnPoint.rotation);
            m_CurrentMagazineAmount--;

        }

    } 
    public void AddBulets(int amount)
    {
        m_CurrentAmmoAmount =
            Mathf.Clamp(m_CurrentAmmoAmount + amount, 0,
            m_MaxAmmo);
    }
        
}

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