Как сбросить все при нажатии на другой кликабельный объект?C#

Место общения программистов C#
Ответить
Anonymous
 Как сбросить все при нажатии на другой кликабельный объект?

Сообщение Anonymous »

Каждый элемент Clickable Object в игре прикреплен этот скрипт.
Когда я нажимаю на элемент в игре, он говорит, и показываю описание. < /p>
Проблема в том, когда я Нажмите на другой кликабельный объект, пока он показывает описание и выступает в середине элемента, который я уже нажал. Объект, и он говорит и показываю описание, и в середине я нажал на другой объект, он не сбросит время длительности/с, поэтому, если 1 секунду останется, он запомнит 1 секунду слева и не сбросит его, чтобы вернуться к 3, когда я нажимаю на другой объект в середине. Средний. < /p>
using System;
using System.Collections.Generic;
using NUnit.Framework;
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

public class ClickableObject : MonoBehaviour
{
public string objectName;
public string description;
public bool isCollectible;
public GameObject inventorySlot;
public TextMeshProUGUI descriptionText;
public GameObject descriptionPanel;
public CanvasGroup panelCanvasGroup;
public float displayDuration = 3f;
public float fadeDuration = 0.5f;

public Texture2D eyeCursor; // Assign in Inspector
public Texture2D handCursor; // Assign in Inspector

private Coroutine fadeOutCoroutine;

void Start()
{
ResetToDefault();
}

void OnMouseDown()
{
if (isCollectible)
{
CollectItem();
}
else
{
ShowDescription();
}
}

void OnMouseEnter()
{
if (isCollectible)
{
Cursor.SetCursor(handCursor, Vector2.zero, CursorMode.Auto);
}
else
{
Cursor.SetCursor(eyeCursor, Vector2.zero, CursorMode.Auto);
}
}

void OnMouseExit()
{
ResetToDefault();
}

void CollectItem()
{
Debug.Log("Collected: " + objectName);
inventorySlot.GetComponent().sprite = GetComponent().sprite;
gameObject.SetActive(false);
ResetToDefault();
}

void ShowDescription()
{
// Stop any ongoing fade-out coroutine
if (fadeOutCoroutine != null)
{
StopCoroutine(fadeOutCoroutine);
}

// Reset the canvas group alpha
panelCanvasGroup.alpha = 1f;

// Update the description text
descriptionText.text = description;

// Stop any ongoing speech
WindowsVoice.stop();

// Start the speech
WindowsVoice.speak(description);

// Activate the description panel
descriptionPanel.SetActive(true);

// Cancel any pending Invoke calls
CancelInvoke("StartFadeOut");

// Invoke the fade-out after the display duration
Invoke("StartFadeOut", displayDuration);
}

void StartFadeOut()
{
fadeOutCoroutine = StartCoroutine(FadeOut());
}

System.Collections.IEnumerator FadeOut()
{
float startAlpha = panelCanvasGroup.alpha;
float rate = 1.0f / fadeDuration;
float progress = 0.0f;

while (progress < 1.0f)
{
panelCanvasGroup.alpha = Mathf.Lerp(startAlpha, 0, progress);
progress += rate * Time.deltaTime;
yield return null;
}

panelCanvasGroup.alpha = 0;
descriptionPanel.SetActive(false);
}

private void ResetToDefault()
{
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); // Store the default cursor
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ble-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»