Не получается изменять HingeJoint через скрипт

Рейтинг: 0Ответов: 1Опубликовано: 27.05.2023

Делал хоррор на юнити (3д) и хотел добавить туда дверь. Зашёл на документацию по юнити посмотреть как менять параметр targetPosition у HingeJoint чтобы сделать открывание и закрывание двери. Сделал тестовый скрипт.

using UnityEngine;

public class Door : MonoBehaviour {
    [SerializeField] private JointSpring spring;

    void Update() {
        if (Input.GetKeyDown("e") || Input.GetKeyDown("joystick button 0")) {
            spring.targetPosition = 179f;
        }
    }
}

Суть скрипта в том, чтобы при нажатии клавиши E или кнопки A на джойстике параметр targetPosition у spring менялся на 179f, но в игре это не работает. targetPosition у HingeJoint остаётся на нуле. Попробовал продебагать скрипт добавив внутрь if строчку Debug.Log("1"); , if работает исправно, но targetPosition не меняется. Также после компиляции скрипта в консоли появляется предупреждение что параметр spring существует, но в коде не используется. Видео (Гугл диск)

Ответы

▲ 1Принят

"параметр spring существует, но в коде не используется" - это как раз говорит о том, что никакой реакции на изменение этого параметра не последует, так как он не читается, а ему только присваивается значение. Возможно, дело в том, что spring - это частное поле в классе Door. Должно быть как-то не так.