Каждый элемент 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
Как сбросить все при нажатии на другой кликабельный объект? ⇐ C#
Место общения программистов C#
-
Anonymous
1739905333
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
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79449170/how-to-reset-everything-when-clicking-on-another-clickable-object[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия