Jump to content
gu2ma

"unity" - Robimy platformówkę

Recommended Posts

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

Edited by jmk

Share this post


Link to post
Share on other sites

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

<<<

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Nie mogę strzelać i pisze mi ten błąd.Pomocy plisssssssss

ArgumentException: Input Button Reolad is not setup.

To change the input settings use: Edit -> Project Settings -> Input

Weapon.Update () (at Assets/Skrypty/Weapon.cs:19)

Share this post


Link to post
Share on other sites

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

Edited by anok98

Share this post


Link to post
Share on other sites

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

Edited by nortalf

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Zrobiłem wszystko dobrze z ostatniej lekcji kursu i... strzelam, zbieram amunicję, ale... wróg stoi i nic się z nim nie dzieje. Tak samo amunicja jak się skończy i zbiorę to muszę przeładować - to normalne?

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by jmk

Share this post


Link to post
Share on other sites

Nie mogłem dojść, bo ten z CDA był... identyczny jak mój, ale skopiowałem ich skrypt i... zaczęło działać.

 

Cały czas mam problem ze skakaniem, tzn. skacze okej, ale czasem wyleci mi w kosmos, wiecie czemu?

Share this post


Link to post
Share on other sites

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? 

Edited by PolskiStig

Share this post


Link to post
Share on other sites

@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

Edited by gu2ma

Share this post


Link to post
Share on other sites

Dodałem dwa screen shoty jakby były potrzebne

Kod tak tygląda

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

2016-03-26_08h20_28.thumb.png.e4ff51aab82016-03-26_08h19_45.thumb.png.e3056bb783

  • Upvote 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Te skrypty masz poprawne

 

Poproszę o:

 

  • ammo
  • bullet
  • enemy
  • PlayerMovement
  • Weapon

Jutro postaram się Ci odpowiedzieć. 

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...