Я использую Unity для отслеживания цели изображения (ARCamera - Vuforia), и все работает отлично. Я вставил некоторые 2D спрайты в цель изображения и т. Д. ... но теперь я не хочу показывать все цели, как только цель изображения будет найдена, поэтому я отправился в DefaultTrackableEventHandler.cs и создал экземпляр моего пользовательского класса Пример так:Coroutine не работает нормально - Unity [C#]
#region PRIVATE_MEMBER_VARIABLES
private TrackableBehaviour mTrackableBehaviour;
#endregion // PRIVATE_MEMBER_VARIABLES
public Example mainClass;
...
private void OnTrackingFound()
{
...
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
mainClass = new Example();
mainClass.OnTrackableFound(); // Public method on 'Example' Class
}
Теперь на моем примере класса:
общественного класса Пример: MonoBehaviour {
public SpriteRenderer forYou;
public SpriteRenderer map;
public Example() {}
private bool isInTransition = false;
private float transition = 1;
private bool isShowing = false;
private float duration = 0;
void Start()
{
forYou = new SpriteRenderer();
map = new SpriteRenderer();
}
public void OnTrackableFound() {
StartCoroutine(FadeCoroutine());
}
private IEnumerator FadeCoroutine() {
yield return new WaitForSeconds(1);
Fade(true, .1f);
}
public void OnTrackableLost() {}
public void Fade (bool showing, float duration)
{
isShowing = showing;
isInTransition = true;
this.duration = duration;
transition = (isShowing) ? 0 : 1;
}
void Update()
{
if (Input.GetMouseButtonDown (0)) {
Fade (true, .1f);
}
if (Input.GetMouseButtonUp (0)) {
Fade (false, .1f);
}
if (!isInTransition) {
return;
}
transition += (isShowing) ? Time.deltaTime * (1/duration) : -Time.deltaTime * (1/duration);
forYou.color = Color.Lerp (Color.white, new Color (1, 1, 1, 0), transition);
map.color = Color.Lerp (Color.white, new Color (1, 1, 1, 0), transition);
if (transition > 1 || transition < 0) {
isInTransition = false;
}
}
} Извините за объем кода, но в основном это только для увядающей в/из некоторых спрайтов. Я хочу уступить, как только мой OnTrackingFound вызывается в классе Example и после idk .5 секунд исчезает в некоторых из моих спрайтов.
Спасибо!
EDIT - решаемые
Таким образом, чтобы прикрепить сценарий к объекту игры он должен наследоваться от Monobehaviour, но чем он не может быть реализован так, что я сделал: мне нужен OnTrackingFound() из DefaultTrackerHandler .. поэтому я закодировал все на этом классе [я знаю, что это далеко не лучшее решение, но ...] вместо создания экземпляра другого скрипта, потому что, поскольку я сказал, что невозможно будет подключить его к игровому объекту, поскольку он не может наследовать от Monobehaviour. С публичными игровыми объектами я привязывал все непосредственно от этого класса, который также наследуется от Monobehvr. Если вы создаете экземпляр сценария, который наследует monobehv, он будет равен нулю. Всем спасибо!
Просто комментарий - The OnTrackableFound() вызывается обычно на моем Пример класса, но StartCoroutine внутри него никогда не вызывается. –