Скрипт на посадку и выход из машины

Общие вопросы о Unity3D

Скрипт на посадку и выход из машины

Сообщение Morri 16 апр 2023, 16:29

(popcorn) Решил значит я сделать скрипт на вход и выход из машины
все сделал все работает а вылести не получается. Ушло около 2-3 часов перечитав куча гайдов ничего не вышло, ChatGPT вообще мне не помощник в юнити :-?
Надеюсь кто то мне поможет

Скрипт находится на кубе который имеет тег Is Trigger

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

public class TriggerEnt : MonoBehaviour {
 
        public RCC_CarControllerV3 canControl;
        public GameObject RCCCamera;
        public GameObject Player;
        public bool inCar;

        private void Start () {

        }
       
        private void Update () {
        }

        void OnTriggerStay(Collider col) {
                if (col.tag == "Player" && Input.GetKeyDown(KeyCode.F)) {
                        if (inCar == false) {
                                inCar = true;
                                canControl.canControl = true;
                                Player.SetActive(false);
                                RCCCamera.SetActive(true);
                        } else {
                                if (inCar == true) {
                                inCar = false;
                                canControl.canControl = false;
                                Player.SetActive(true);
                                RCCCamera.SetActive(false);
                                Debug.Log("use else");
                        }
                        }
                }
        }

        void OnTriggerExit(Collider col) {
                if (col.tag == "Player") {
                canControl.canControl = false;
                Debug.Log("Trigger Exit");
                }
        }
}
Morri
UNец
 
Сообщения: 4
Зарегистрирован: 16 апр 2023, 16:25

Re: Скрипт на посадку и выход из машины

Сообщение 1max1 16 апр 2023, 16:57

OnTriggerStay

Input.GetKeyDown

1. Неправильно использовать события Input в физических апдейтах, они там работают через раз, тк частота апдейта физики может быть меньше частоты кадров игры.
2. У физических тел есть свойство засыпать если они не двигаются, соответственно события OnTriggerStay выключаются. Вообще не рекомендую использовать Stay, это всегда можно заменить на enter/exit + update.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт на посадку и выход из машины

Сообщение Morri 16 апр 2023, 17:06

1max1 писал(а):
OnTriggerStay

Input.GetKeyDown

1. Неправильно использовать события Input в физических апдейтах, они там работают через раз, тк частота апдейта физики может быть меньше частоты кадров игры.
2. У физических тел есть свойство засыпать если они не двигаются, соответственно события OnTriggerStay выключаются. Вообще не рекомендую использовать Stay, это всегда можно заменить на enter/exit + update.


Я новичёк в C# если честно поэтому как мне изменить правильно
Скрытый текст:
(изучать начал недавно, поскольку кодил исключительно на python но не об этом)

Если я переделаю onTrigerStay то клавиша перестанет работать, друг говорит что нужно взаимодействовать с update но тогда игнорируется тригер :)
Буду рад если чучуть поможешь в коде (возможно дальше сам разберусь)
Morri
UNец
 
Сообщения: 4
Зарегистрирован: 16 апр 2023, 16:25

Re: Скрипт на посадку и выход из машины

Сообщение 1max1 16 апр 2023, 17:42

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

public class TriggerEnt : MonoBehaviour
{
    public RCC_CarControllerV3 canControl;
    public GameObject RCCCamera;
    public GameObject Player;
    public bool inCar;

    bool inTrigger;

    void Update()
    {
        if (inTrigger && Input.GetKeyDown(KeyCode.F))
        {
            Debug.Log("pressed f");

            if (inCar == false)
            {
                Debug.Log("case 1");

                inCar = true;
                canControl.canControl = true;
                Player.SetActive(false);
                RCCCamera.SetActive(true);
            }
            else
            {
                Debug.Log("case 2");

                inCar = false;
                canControl.canControl = false;
                Player.SetActive(true);
                RCCCamera.SetActive(false);
            }
        }
    }

    void OnTriggerEnter(Collider col)
    {
        Debug.Log("OnTriggerEnter col.tag = " + col.tag);

        if (col.tag == "Player")
        {
            Debug.Log("OnTriggerEnter inTrigger = true");

            inTrigger = true;
        }
    }

    void OnTriggerExit(Collider col)
    {
        Debug.Log("OnTriggerExit col.tag = " + col.tag);

        if (col.tag == "Player")
        {
            Debug.Log("OnTriggerExit inTrigger = false");

            inTrigger = false;

            canControl.canControl = false;
        }
    }
}
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт на посадку и выход из машины

Сообщение Morri 16 апр 2023, 18:03

1max1 писал(а):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class TriggerEnt : MonoBehaviour
{
    public RCC_CarControllerV3 canControl;
    public GameObject RCCCamera;
    public GameObject Player;
    public bool inCar;

    bool inTrigger;

    void Update()
    {
        if (inTrigger && Input.GetKeyDown(KeyCode.F))
        {
            Debug.Log("pressed f");

            if (inCar == false)
            {
                Debug.Log("case 1");

                inCar = true;
                canControl.canControl = true;
                Player.SetActive(false);
                RCCCamera.SetActive(true);
            }
            else
            {
                Debug.Log("case 2");

                inCar = false;
                canControl.canControl = false;
                Player.SetActive(true);
                RCCCamera.SetActive(false);
            }
        }
    }

    void OnTriggerEnter(Collider col)
    {
        Debug.Log("OnTriggerEnter col.tag = " + col.tag);

        if (col.tag == "Player")
        {
            Debug.Log("OnTriggerEnter inTrigger = true");

            inTrigger = true;
        }
    }

    void OnTriggerExit(Collider col)
    {
        Debug.Log("OnTriggerExit col.tag = " + col.tag);

        if (col.tag == "Player")
        {
            Debug.Log("OnTriggerExit inTrigger = false");

            inTrigger = false;

            canControl.canControl = false;
        }
    }
}
 


Огромное спасибо :)
Morri
UNец
 
Сообщения: 4
Зарегистрирован: 16 апр 2023, 16:25


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11