Страница 1 из 1

Не понимаю что не так[РЕШЕНО]

СообщениеДобавлено: 16 фев 2020, 13:28
tema_petrosyan
Написал я такой код, а он не фурычит, и не понимаю что не так :(
В общем, суть такова:
Я нажимаю на объект, он поворачивается на определённый градус и выполняет функцию которую получает из другого скрипта.
Пожалуйста, помогите!

вот это я повесил на объект который надо жать
Синтаксис:
Используется csharp
public class руль : MonoBehaviour
{
    public GameObject engine;
    public GameObject control_wheel;

    private int count = 0;

    public void OnMouseDown()
    {
        if (Input.GetMouseButtonDown(0))
        {
            engine.GetComponent<moving>().run();
             control_wheel.transform.eulerAngles = new Vector3(-90, 0, 45);
            count += 1;
            if (count == 4)
            {
                control_wheel.transform.eulerAngles = new Vector3(-90, 0, 45);
                engine.GetComponent<moving>().stop();
                count = 0;
            }
        }
    }
}


а вот это управляющий
Синтаксис:
Используется csharp
public class moving : MonoBehaviour
{
    public GameObject poezd;
    public float acceleration;
    private float speed;

    public GameObject[] waypoints;
    public int num = 0;

    public void run()
    {
        speed += acceleration * Time.deltaTime;
        Move();
    }

    public void stop()
    {
        speed -= acceleration * Time.deltaTime;
        Move();
    }


    private void Move()
    {
        gameObject.transform.LookAt(waypoints[num].transform.position);
        gameObject.transform.position += gameObject.transform.forward * speed * Time.deltaTime;
    }
}
 

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 14:25
kezin636
не понял, а почему название скрипта русское?

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 14:27
kezin636
Конечно, на onmousedown он будет единично вызывать функцию.

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 14:28
kezin636
используй в Update() тот самый код, который ты впихнул в OnMouseDown();

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 14:53
tema_petrosyan
kezin636 писал(а):используй в Update() тот самый код, который ты впихнул в OnMouseDown();

Сделал - результата ноль. Теперь он выдаёт ошибку NullReferenceExeption. Так же я поменял
Синтаксис:
Используется csharp
private int count = 1;

    public void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            engine.GetComponent<Moving>().run();
             control_wheel.transform.eulerAngles = new Vector3(-90, 0, 45);
            count += 1;
            if (count == 4)
            {
                control_wheel.transform.eulerAngles = new Vector3(-90, 0, 45);
                engine.GetComponent<Moving>().stop();
                count = 1;
            }
        }
    }

и теперь он вообще не реагирует, даже ошибку никакую не выдаёт.

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 15:31
tema_petrosyan
Так, проблема решилась :ymparty: - всё заработало: колесо крутится, поезд едет, но теперь возникла другая проблема.
Когда игрок находится в кабине и нажимает на управляющее колесо, поезд начинает перемещаться, а игрока вдавливает в стену, а мне надо что бы можно было свободно ходить по кабине даже во время движения. Итак, как можно реализовать эту возможность?

Re: Не понимаю что не так.

СообщениеДобавлено: 16 фев 2020, 15:48
1max1
tema_petrosyan писал(а):Так, проблема решилась :ymparty: - всё заработало: колесо крутится, поезд едет, но теперь возникла другая проблема.
Когда игрок находится в кабине и нажимает на управляющее колесо, поезд начинает перемещаться, а игрока вдавливает в стену, а мне надо что бы можно было свободно ходить по кабине даже во время движения. Итак, как можно реализовать эту возможность?

Физики или делать дочерним к поезду. Я бы выбрал 2 ибо физика в юнити це пыздець)