Нужна помощь по реализации механики.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Нужна помощь по реализации механики.

Сообщение 1kosmos1 09 апр 2020, 21:29

Всем здравствуйте)
Никак не могу найти ответ на один вопрос. Подскажите пожалуйста как реализовать зависания игрока в воздухе при касании триггера и потом чтоб проигрывалась анимация смерти и респаун?
Вот как на рисунке 2 чтоб он не падал и чтоб им нельзя было управлять в этот момент.
Спасибо)))

Вот ссылки на фото.

https://drive.google.com/file/d/1EjLu0b ... sp=sharing
https://drive.google.com/file/d/1pJ6Crz ... sp=sharing
1kosmos1
UNец
 
Сообщения: 5
Зарегистрирован: 09 апр 2020, 20:33

Re: Нужна помощь по реализации механики.

Сообщение Dio5555 09 апр 2020, 23:12

Синтаксис:
Используется csharp
//Вешаем на триггер
    private void OnTriggerEnter(Collider other)
    {

        if (other.gameObject.tag == "Player")
        {

            //Stop PlayerController
            //Start Animation Dead
            //Start PlayerController " Gravity "
            //Удаляем или выводим сообщение о смерти.

        }

    }
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: Нужна помощь по реализации механики.

Сообщение 1kosmos1 10 апр 2020, 02:29

Re: Нужна помощь по реализации механики.

Сообщение Dio5555 Вчера, 23:12
Синтаксис: [ Выбрать ] [ Свернуть ]
Используется csharp
//Вешаем на триггер
private void OnTriggerEnter(Collider other)
{

if (other.gameObject.tag == "Player")
{

//Stop PlayerController
//Start Animation Dead
//Start PlayerController " Gravity "
//Удаляем или выводим сообщение о смерти.

}

}

К сожалению не работает((
VS выдает ошибки подчеркивая Stop, " Gravity ", Dead((
1kosmos1
UNец
 
Сообщения: 5
Зарегистрирован: 09 апр 2020, 20:33

Re: Нужна помощь по реализации механики.

Сообщение Saltant 10 апр 2020, 04:33

1kosmos1 писал(а):
Re: Нужна помощь по реализации механики.

Сообщение Dio5555 Вчера, 23:12
Синтаксис: [ Выбрать ] [ Свернуть ]
Используется csharp
//Вешаем на триггер
private void OnTriggerEnter(Collider other)
{

if (other.gameObject.tag == "Player")
{

//Stop PlayerController
//Start Animation Dead
//Start PlayerController " Gravity "
//Удаляем или выводим сообщение о смерти.

}

}

К сожалению не работает((
VS выдает ошибки подчеркивая Stop, " Gravity ", Dead((

И не будет работать, т.к это псевдокод в теле условия.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Нужна помощь по реализации механики.

Сообщение Dio5555 10 апр 2020, 05:17

Ну что-же, я старался. :))
Ситуация "сложно", но "хочет". (popcorn)
Блин, я как этот смайлик, только под столом " =)) " ... без обид.
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: Нужна помощь по реализации механики.

Сообщение 1kosmos1 10 апр 2020, 14:47

Так подскажите как правильно прописать код чтобы все заработало я просто недавно в этом деле и не до конца понимаю как все исправить?
1kosmos1
UNец
 
Сообщения: 5
Зарегистрирован: 09 апр 2020, 20:33

Re: Нужна помощь по реализации механики.

Сообщение Woland 10 апр 2020, 15:00

При срабатывании триггера делаешь rigidbody2D своего персонажа isKinematic, потом запускаешь свою анимацию. Через Animation или Animator, смотря, как у тебя сделано.
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Нужна помощь по реализации механики.

Сообщение Dio5555 11 апр 2020, 00:55

Так я подсказал, а у вас получается, что дай.
Изучите основы Unity
1.CSharp язык
2.Как создать персонажей
3.Как использовать триггеры
Этого добра валом на YouTube, там это в "картинках" и с объяснениями, также Оф документации.

А если вы будите просить сделать за вас, то вы нечего не сделаете сами, тогда смысл что-то делать, когда можно скачать и поиграть в то, что уже сделали не вы. =)
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: Нужна помощь по реализации механики.

Сообщение 1kosmos1 11 апр 2020, 18:28

Я пробую реализовать через "isFrozen " но функция "GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;" не работает потому что в ней пишет "<Rigidbody>" а не "<Rigidbody2D>". Почему когда я пытаюсь исправить на 2D то не получается? В чем суть?)
Вот образец кода который я пишу.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PersCon : MonoBehaviour

{
   

    Rigidbody2D rigidBody;
    public float moveSpeed = 10f;

    bool isFacingRight = true;
   
    Animator anim;

    bool isTilemap = false;

   

    float tilemapRadius = 0.2f;

    public LayerMask whatIsTilemap;

   
    public Transform graChek;
    public float checkRadius;

   

    public float jumpForce;

    private int extraJumps;
    public int extraJumpsValue;

    bool canJump;
    bool canWallJump;

    public static int health = 1;


    private bool isFrozen = false;

       

    void Start()
    {
        anim = GetComponent<Animator>();
        rigidBody = GetComponent<Rigidbody2D>();
        extraJumps = extraJumpsValue;
             
    }



    void FixedUpdate()
    {
        isTilemap = Physics2D.OverlapCircle(graChek.position, checkRadius, whatIsTilemap);


        Run();

        isTilemap = Physics2D.OverlapCircle(graChek.position, tilemapRadius, whatIsTilemap);
        anim.SetBool("Tilemap", isTilemap);
        anim.SetFloat("vSpeed", rigidBody.velocity.y);
        if (!isTilemap)
            return;

       
    }


    private void Update()
    {
        if (isTilemap == true || canWallJump == true)
        {
            extraJumps = extraJumpsValue;
            canJump = true;
        }
        else
        {
            canJump = false;
        }


        if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)  //&& extraJumps > 0)  && extraJumps == 0
        {
            DoJump();
            rigidBody.velocity = Vector2.up * jumpForce;
            extraJumps--;
        }
        else if (Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isTilemap == true)
        {
            rigidBody.velocity = Vector2.up * jumpForce;
        }

        anim.SetInteger("Health", health);


        if (health <= 0 )
        {
            StartCoroutine(Dead());
        }

        if (isFrozen == true)
        {
            GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
        }
    }
   

    public void Run()
    {
        float move = Input.GetAxis("Horizontal");
        anim.SetFloat("Speed", Mathf.Abs(move));

        rigidBody.velocity = new Vector2(move * moveSpeed, rigidBody.velocity.y);
        if (move > 0 && !isFacingRight)
            Flip();
        else if (move < 0 && isFacingRight)
            Flip();

    }

    void Flip()
    {
        isFacingRight = !isFacingRight;

        Vector3 theScale = transform.localScale;

        theScale.x *= -1;

        transform.localScale = theScale;
    }



    public void DoJump()
    {
        rigidBody.velocity = Vector2.up * jumpForce;
    }


    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag.Equals("Wall"))
        {
            canWallJump = true;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.tag.Equals("Wall"))
        {
            canWallJump = false;
        }
    }

    void OnTriggerEnter2D(Collider2D other)
    {

        if (other.gameObject.CompareTag("Respawn"))          
        {
            health--;

            isFrozen = true;

        }
    }
   
    private IEnumerator Dead()
    {
        yield return new WaitForSeconds(3f);
        health = 1;
        SceneManager.LoadScene(0);
       
    }


}
1kosmos1
UNец
 
Сообщения: 5
Зарегистрирован: 09 апр 2020, 20:33

Re: Нужна помощь по реализации механики.

Сообщение Dio5555 12 апр 2020, 08:56

1kosmos1 писал(а):Я пробую реализовать через "isFrozen " но функция "GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;" не работает потому что в ней пишет "<Rigidbody>" а не "<Rigidbody2D>". Почему когда я пытаюсь исправить на 2D то не получается? В чем суть?)


Синтаксис:
Используется csharp
//До
//GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
//После
GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeRotation;
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: Нужна помощь по реализации механики.

Сообщение 1kosmos1 13 апр 2020, 16:24

Все решил вот таким способом:
Синтаксис:
Используется csharp
       
         void Update()
   
        if (health <= 0 )      // У меня здесь бил оператор жизней который запускал Coroutine вот я и прописал в него эти две функции!
        {
            GetComponent<PersCon>().enabled = false;
           
            gameObject.GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezePositionY;

           
            StartCoroutine(Dead());
        }



Синтаксис:
Используется csharp
GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeRotation;
//А сделать так в 2D не получится потому что это функции для 3D!
 

Ну и ошибка состояла в том что я прописывал функции в триггере а надо было в Update!
Да ну и натупил же я)))
1kosmos1
UNец
 
Сообщения: 5
Зарегистрирован: 09 апр 2020, 20:33

Re: Нужна помощь по реализации механики.

Сообщение Saltant 13 апр 2020, 22:01

Разве у тебя в апдейте не запустится куча корутин таким способом? Зачем вообще в апдейте хп проверять да еще и корутины стартовать.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 26


cron