Воскресенье, 22 Декабря 2024, 18:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Лестница в 2d платформере
OektannДата: Воскресенье, 08 Марта 2015, 01:13 | Сообщение # 1
уже был
Сейчас нет на сайте
Мне нужно сделать клон Donkey Kong на Unity. Не могу осилить лестницы. Так как платформы на которых стоит персонаж и сам персонаж имеют collider2D, чтобы игрок не проваливался сквозь них я не могу пройти сквозь платформы, когда взбираюсь по лестнице. Персонаж просто упирается в них и все. Подскажите пожалуйста, как это решить?
Storm54Дата: Воскресенье, 08 Марта 2015, 21:17 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Отключать коллайдер персонажа или платформ, когда начинаешь ползти по лестнице. Можно сменить слой персонажа на другой, и в настройках физики отключить обработку коллизий слоя с платформами и персонажем.
MANMANAДата: Воскресенье, 08 Марта 2015, 22:09 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
игнорить определенный коллайдер персонажем в определенный момент времени (на определенное время) посредством тегов или слоев, например.
как только перс окажется выше заигноренного коллайдера включить столкновения с этим коллайдером.

можно от обратного игнорить коллайдер игрока коллайдером пола.

p.s. при отключении коллайдера, например, игрока, вместо игнора даного коллайдера могут пропасть кейсы попадания в коллайдер игрока пуль, врагов и т.д.
p.p.s. отключение коллайдера пола может привести к падению на уровень ниже всех находящихся на нем злых врагов smile


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Воскресенье, 08 Марта 2015, 22:09
OektannДата: Воскресенье, 08 Марта 2015, 22:22 | Сообщение # 4
уже был
Сейчас нет на сайте
У меня не получается отключать коллайдер персонажа Collider2d.enabled = false; игнорируется. На игроке и на полу стоят boxCollider 2d, но к его свойству enabled я почему то обратиться не могу. А можно про "в настройках физики отключить обработку коллизий слоя с платформами и персонажем" поподробней? как это сделать?
MANMANAДата: Воскресенье, 08 Марта 2015, 22:48 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Игнор коллизий
http://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html
http://answers.unity3d.com/questions/45956/ignore-collision.html
2D
http://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html
таги
http://answers.unity3d.com/questio....er.html
матрица
http://gamedev.stackexchange.com/questio....objects
http://gamedev.stackexchange.com/questio....ontexts


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
ЛевшаДата: Понедельник, 09 Марта 2015, 08:26 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Заюзай односторонний коллайдер.

X.cor.R (Prologue)
MANMANAДата: Вторник, 10 Марта 2015, 22:07 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Левша, ты про PlatformEffector2D.oneWay?
а то я только костыли встречал.
а для общего развития хотелось бы знать smile


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
ЛевшаДата: Среда, 11 Марта 2015, 07:09 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Можно и это.
Имелось ввиду какой нибудь аналог MeshCollider в 2Д физике.
Надо проверить PolygonCollider2D, возможно он односторонний.
Сам пока применяю в 2Д проектах только 3Д физику, к 2Д физике пока нет доверия полного.
smile


X.cor.R (Prologue)
MANMANAДата: Среда, 11 Марта 2015, 10:29 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Вот ты... smile интриган
Можно ландшафтовский коллайдер запулить, если на производительность начхать три раза smile


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
Assara_De_NirisДата: Пятница, 14 Августа 2020, 12:35 | Сообщение # 10
уже был
Сейчас нет на сайте
У меня некорректно работает С# скрипт для лестницы
я не понимаю почему
код
Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ladder : MonoBehaviour
{
    [SerializeField]

    float speed = 5;

    void OnTriggerStay2D(Collider2D other)
    {
        other.GetComponent<Rigidbody2D>().gravityScale = 0;
    
        if (other.gameObject.CompareTag("Player"))
        {
            
            if (Input.GetKey(KeyCode.W))
            {
                other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, speed);
            }
        }
        else if (Input.GetKey(KeyCode.S))
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -speed);
        }
        else
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
        }

   
    }
    void OnTriggerExid2D(Collider2D other) => other.GetComponent<Rigidbody2D>().gravityScale = 1;
            
}

в место работы отключается гравитация, а проверка земли под ногами видя коллайдер позволяет прыгать бесконечно.
При отходе от коллайдера гравитация не включается.
делал по уроку
Код
https://www.youtube.com/watch?v=DSV7eRXuAIQ&feature=emb_logo

Добавлено (14 Августа 2020, 12:39)
---------------------------------------------
Я думаю что возможно ошибка в коде игрока

Код
public class player : MonoBehaviour
{

    // ПЕременные
    Rigidbody2D rb; // физика модели героя, является классом
    public float speed; // скорость
    public float jumpHeight; // высота прыжка
    public Transform groundCheak; // проверка земли
    bool isgrouded; // состояние наземле\в полете
    Animator anim; // анимации
    int curHp; // количество жизней
    int maxHp = 3; // максимальное количество жизней
    bool isHit = false;
    public main main;

    // Start is called before the first frame update
    void Start()   // метод старт вызывается едтнажды!
    {
        rb = GetComponent<Rigidbody2D>(); // присваиваем "rb" класс <Rigidbody2D>
        anim = GetComponent<Animator>(); // включает анимации
        curHp = maxHp; // в начале игры всезда будет м максимальное кол-во жизней
    }

    // Update is called once per frame
    void Update()  // метод обдейт вызывается каждый кадр!/ метод графического движка
    {

        chekGround(); // проверка
        if (Input.GetAxis("Horizontal") == 0 && (isgrouded))// если не ножата ни одно кнопка горизонтали и не находится в воздухе
        {
            anim.SetInteger("state", 1);// то проигрываяется анимация покоя
        }
        else
        {
            flep(); // вызываем метод флип
            if (isgrouded)
                anim.SetInteger("state", 2);
        }
    }

    void FixedUpdate() // метод физического движка
    {
        rb.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rb.velocity.y); // управление по горизонтали  ("a", "b")("->" "<-") (-1 0 +1)
        if (Input.GetKeyDown(KeyCode.W) && isgrouded) // если нажат пробел и игрок стоит на земле
            rb.AddForce(transform.up * jumpHeight, ForceMode2D.Impulse); // то совершается прыжок с силой * "jumpHeight"

    }

    void flep() //обычный не системный метод
    {
        if (Input.GetAxis("Horizontal") > 0) // если герой смотрит на право
            transform.localRotation = Quaternion.Euler(0, 0, 0); // то его иконка остается прежней  
        if (Input.GetAxis("Horizontal") < 0) // если герой смотрит на лево
            transform.localRotation = Quaternion.Euler(0, 180, 0); // то его иконка поворачивается на (180 по y)  
    }

    void chekGround()// метод проверка земли под ногами
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCheak.position, 0.5f); // все колайдеры в радиесе (0.2f) будут помещены в список (colliders)
        isgrouded = colliders.Length > 1;// если длинны списка колайдеров больше 1 (1 это сам игрк) то значит что под его ноами чтото естьи можно отскочить
        if (!isgrouded)
            anim.SetInteger("state", 3);
    }
    public void RecountHp(int deltaHp)
    {
        curHp = curHp + deltaHp;
        if (deltaHp < 0)
            StopCoroutine(OnHit());
        isHit = true;
        StartCoroutine(OnHit());
        print(curHp);
        if (curHp <= 0)
        {
            GetComponent<CapsuleCollider2D>().enabled = false;
            Invoke("lose", 2f); // время от смерти игрока до перезапуска уровня
        }
    }
    IEnumerator OnHit()
    {
        if (isHit)
        GetComponent<SpriteRenderer>().color = new Color(1f, GetComponent<SpriteRenderer>().color.g - 0.04f, GetComponent<SpriteRenderer>().color.b - 0.04f);
        else
            GetComponent<SpriteRenderer>().color = new Color(1f, GetComponent<SpriteRenderer>().color.g + 0.04f, GetComponent<SpriteRenderer>().color.b + 0.04f);
        if (GetComponent<SpriteRenderer>().color.g == 1f)
            StopCoroutine(OnHit());
        if (GetComponent<SpriteRenderer>().color.g <= 0)
            isHit = false;
                yield return new WaitForSeconds(0.02f);
        StartCoroutine(OnHit());
        }
    
    void lose()
    {
        main.GetComponent<main>().lose();
    }
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг