Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом C# для unity

Damlow Ученик (130), на голосовании 6 месяцев назад
Всем привет, делаю мобильное управление в чужом проекте и не могу понять как его сделать, сделал специальный скрипт который определяет включена ли кнопка ga, чтобы увеличить объект objectToScale и чтобы когда ga перестал работать тот в свою очередь уменьшился, но это не работает, помогите пожалуйста исправить.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class DrugoyButton : MonoBehaviour, IPointerDownHandler
{
private bool isPressed = false;

public GameObject objectToScale;
public GameObject ga;

public void OnPointerDown(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = true;
objectToScale.transform.localScale += new Vector3(1.2f, 1.2f, 1.2f);
}
}

public void OnPointerUp(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = false;
objectToScale.transform.localScale -= new Vector3(1.2f, 1.2f, 1.2f);
}
}

private void Update()
{
if (isPressed)
{
objectToScale.transform.localScale += new Vector3(0, 0 * Time.deltaTime, 0);
}
}
}
Голосование за лучший ответ
Сергей Гений (59760) 7 месяцев назад
Вызываешь такой слесаря кран починить. Он пришел, пожал плечами, сказал что не разбирается в кранах, взял деньги и ушел.
Chudo_Chudnoe Мастер (2185) 7 месяцев назад
Твой класс реализует только IPointerDownHandler, но не реализует IPointerUpHandler. Для отслеживания момента отпускания кнопки, тебе нужно также реализовать интерфейс IPointerUpHandler.

В методе Update ты пытаешься изменить размер объекта, но у тебя стоит нулевое значение умножения. Также, постоянно увеличивать или уменьшать размер в Update может привести к непредсказуемым результатам из-за разных скоростей обновления кадров. Если ты хочешь плавно изменять размер, нужно использовать плавное изменение размера (Lerp).

Увеличивать и уменьшать localScale на фиксированное значение может привести к нежелательным эффектам, особенно если ты начинаешь с неединичного масштаба.

Попробуй так:


 using UnityEngine; 
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class DrugoyButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
private bool isPressed = false;
public GameObject objectToScale;
public GameObject ga;

public void OnPointerDown(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = true;
StartCoroutine(ScaleOverTime(objectToScale.transform, objectToScale.transform.localScale * 1.2f, 0.5f));
}
}

public void OnPointerUp(PointerEventData eventData)
{
if (eventData.pointerEnter == ga && isPressed)
{
isPressed = false;
StartCoroutine(ScaleOverTime(objectToScale.transform, objectToScale.transform.localScale / 1.2f, 0.5f));
}
}

private IEnumerator ScaleOverTime(Transform targetTransform, Vector3 targetScale, float duration)
{
Vector3 originalScale = targetTransform.localScale;
float time = 0f;

while (time < duration)
{
targetTransform.localScale = Vector3.Lerp(originalScale, targetScale, time / duration);
time += Time.deltaTime;
yield return null;
}

targetTransform.localScale = targetScale;
}
}
Теперь твой класс сможет правильно обрабатывать события нажатия и отпускания кнопки.
Используется корутина для плавного изменения размера объекта, что более надежно и красиво, чем прямое изменение в Update.
Проверка isPressed в OnPointerUp предотвращает нежелательные изменения размера при неверных событиях.
DamlowУченик (130) 7 месяцев назад
Здравствуйте, спасибо что решили помочь! Но скрипт не работает должным образом. Скрипт работает только тогда, когда нажимается на кнопку на которую наложен сам этот скрипт, если я выбираю другую кнопку в ga, то ничего не работает.
Chudo_Chudnoe Мастер (2185) Damlow, да, ты прав. Давай попробуйем версию с установкой EventTrigger. Код длинный, не помещается в комментах, написал описание и сам скрипт на https://telegra.ph Ссылка нормальная если что)
Chudo_ChudnoeМастер (2185) 7 месяцев назад
Не бывает безвыходных ситуаций) Будем дальше копать и думать?)
Похожие вопросы