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

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

Damlow Ученик (130), на голосовании 9 месяцев назад
Всем привет, делаю мобильное управление в чужом проекте и не могу понять как его сделать, сделал специальный скрипт который определяет включена ли кнопка 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);
}
}
}
Голосование за лучший ответ
Сергей Гений (60139) 10 месяцев назад
Вызываешь такой слесаря кран починить. Он пришел, пожал плечами, сказал что не разбирается в кранах, взял деньги и ушел.
Chudo_Chudnoe Мастер (2187) 10 месяцев назад
Твой класс реализует только 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) 10 месяцев назад
Здравствуйте, спасибо что решили помочь! Но скрипт не работает должным образом. Скрипт работает только тогда, когда нажимается на кнопку на которую наложен сам этот скрипт, если я выбираю другую кнопку в ga, то ничего не работает.
Chudo_Chudnoe Мастер (2187) Damlow, да, ты прав. Давай попробуйем версию с установкой EventTrigger. Код длинный, не помещается в комментах, написал описание и сам скрипт на https://telegra.ph Ссылка нормальная если что)
Chudo_ChudnoeМастер (2187) 10 месяцев назад
Не бывает безвыходных ситуаций) Будем дальше копать и думать?)
Похожие вопросы