проблемы с векторами

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: проблемы с векторами

Сообщение kirya_355 22 июл 2018, 11:15

и всё же , где писать
transform.parent = canvas.transform;
transform.SetAsLastSibling();
если я пишу в Starte prefab'а , то вылетает ошибка , The name `canvas' does not exist in the current context , нужно обозначить канвас , через public не получается , так как это префаб ,что делать?

вот код на префабе
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class bannerdestroy : MonoBehaviour
{
    [SerializeField] Transform banner;
    [SerializeField] float speedMove = 30.0f;
    [SerializeField] float offsetPosition;

    void Start ()
    {          
        StartCoroutine (MoveToDie ());
    }

    IEnumerator MoveToDie ()
    {
        Vector3 startPosition = banner.position;
        Vector3 finishPosition = startPosition + Vector3.up * offsetPosition;

        while (true)
        {
            banner.position = Vector3.MoveTowards (banner.position, finishPosition, speedMove * Time.deltaTime);

            if ((banner.position - finishPosition).magnitude < 1.0f)
            {
                break;
            }

            yield return null;
        }

        yield return new WaitForSeconds (2.0f);

        while (true)
        {
            banner.position = Vector3.MoveTowards (banner.position, startPosition, speedMove * Time.deltaTime);

            if ((banner.position - startPosition).magnitude < 1.0f)
            {
                Destroy (banner.gameObject);

                break;
            }

            yield return null;
        }
    }
}


а вот при его создании
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.Advertisements;
using UnityEngine.SceneManagement;

public class UnityAds : MonoBehaviour
{
  public GameObject banner, banner1;
  private bool ads, net;
  public Canvas canvas;

  void Start ()
  {

    if (Advertisement.isSupported)
    {
      ads = true;
      Advertisement.Initialize ("2578372", false);
    }
    else
      ads = false;

  }

  void OnMouseUpAsButton ()
  {
    if (ads)
    {
      ShowRewardedAd ();
    }
    else
    {
      GameObject[] allGo = FindObjectsOfType<GameObject> ();
      bool ins = true;

      foreach (GameObject go in allGo)
      {
        if (go.CompareTag ("banner"))
          ins = false;
      }

      if (ins)
      {
        Instantiate (banner1, new Vector2 (0, 0), Quaternion.identity);
      }
    }

    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
      GameObject[] allGo = FindObjectsOfType<GameObject> ();
      bool ins = true;

      foreach (GameObject go in allGo) //здесь 48 строчка
      {
        if (go.CompareTag ("banner"))
          ins = false;
      }

      if (ins)
      {
        Instantiate (banner, new Vector2 (0, 0), Quaternion.identity);
      }
    }
  }

  public void ShowRewardedAd ()
  {
    if (Advertisement.IsReady ("rewardedVideo"))
    {
      var options = new ShowOptions { resultCallback = HandleShowResult };
      Advertisement.Show ("rewardedVideo", options);
    }

  }

  private void HandleShowResult (ShowResult result)
  {
    switch (result)
    {
      case ShowResult.Finished:

        if (SceneManager.GetActiveScene ().name == "shop")
        {
          int i = PlayerPrefs.GetInt ("allscore");
          PlayerPrefs.SetInt ("allscore", i + 50);

        }

        break;
      case ShowResult.Skipped:

        break;
      case ShowResult.Failed:

        break;
    }
  }

}
kirya_355
UNIт
 
Сообщения: 106
Зарегистрирован: 09 май 2018, 21:40

Re: проблемы с векторами

Сообщение 1max1 22 июл 2018, 11:38

нужно обозначить канвас , через public не получается , так как это префаб ,что делать?

Учить юнити например...
Синтаксис:
Используется csharp
var canvas = GameObject.Find("Canvas").transform;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: проблемы с векторами

Сообщение kirya_355 22 июл 2018, 16:16

новая проблема , когда создается объект у него scale равен 4 , а нужно 1 , если создавать вне канваса scale 4 , а если из префаба перенести в канвас все нормально , я так понимаю , он создается за канвасом , а потом переносится в канвас , как сразу создать в Canvas , или хотя бы исправить это?
вот скрины
[url]
https://ibb.co/mmQiRy
https://ibb.co/iZOReJ
https://ibb.co/dCwCKJ
[/url]

скрипт 1 на кнопке
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.Advertisements;
using UnityEngine.SceneManagement;

public class UnityAds : MonoBehaviour
{
  public GameObject banner, banner1;
  private bool ads, net;

  void Start ()
  {

    if (Advertisement.isSupported)
    {
      ads = true;
      Advertisement.Initialize ("2578372", false);
    }
    else
      ads = false;

  }

  void OnMouseUpAsButton ()
  {
    if (ads)
    {
      ShowRewardedAd ();
    }
    else
    {
      GameObject[] allGo = FindObjectsOfType<GameObject> ();
      bool ins = true;

      foreach (GameObject go in allGo)
      {
        if (go.CompareTag ("banner"))
          ins = false;
      }

      if (ins)
      {
        Instantiate (banner1);
      }
    }

    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
      GameObject[] allGo = FindObjectsOfType<GameObject> ();
      bool ins = true;

      foreach (GameObject go in allGo)
      {
        if (go.CompareTag ("banner"))
          ins = false;
      }

      if (ins)
      {
        Instantiate (banner);
      }
    }
  }

  public void ShowRewardedAd ()
  {
    if (Advertisement.IsReady ("rewardedVideo"))
    {
      var options = new ShowOptions { resultCallback = HandleShowResult };
      Advertisement.Show ("rewardedVideo", options);
    }

  }

  private void HandleShowResult (ShowResult result)
  {
    switch (result)
    {
      case ShowResult.Finished:

        if (SceneManager.GetActiveScene ().name == "shop")
        {
          int i = PlayerPrefs.GetInt ("allscore");
          PlayerPrefs.SetInt ("allscore", i + 50);

        }

        break;
      case ShowResult.Skipped:

        break;
      case ShowResult.Failed:

        break;
    }
  }

}

скрипт 2 на префабе
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class bannerdestroy : MonoBehaviour
{
    [SerializeField] Transform banner;
    [SerializeField] float speedMove = 30.0f;
    [SerializeField] float offsetPosition;

    void Start ()
    {
        var canvas = GameObject.Find ("Canvas").transform;
        transform.parent = canvas.transform;
        transform.SetAsLastSibling ();
        StartCoroutine (MoveToDie ());
    }

    IEnumerator MoveToDie ()
    {
        Vector3 startPosition = banner.position;
        Vector3 finishPosition = startPosition + Vector3.up * offsetPosition;

        while (true)
        {
            banner.position = Vector3.MoveTowards (banner.position, finishPosition, speedMove * Time.deltaTime);

            if ((banner.position - finishPosition).magnitude < 1.0f)
            {
                break;
            }

            yield return null;
        }

        yield return new WaitForSeconds (2.0f);

        while (true)
        {
            banner.position = Vector3.MoveTowards (banner.position, startPosition, speedMove * Time.deltaTime);

            if ((banner.position - startPosition).magnitude < 1.0f)
            {
                Destroy (banner.gameObject);

                break;
            }

            yield return null;
        }
    }
}
kirya_355
UNIт
 
Сообщения: 106
Зарегистрирован: 09 май 2018, 21:40

Re: проблемы с векторами

Сообщение 1max1 22 июл 2018, 16:23

Даже не знаю, очень сложно, думаю нужно быть гением, чтобы додуматься как поменять скейсл объекту.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: проблемы с векторами

Сообщение kirya_355 22 июл 2018, 17:24

1max1 писал(а):Даже не знаю, очень сложно, думаю нужно быть гением, чтобы додуматься как поменять скейл объекту.

спасибо, МАХтер сарказма , была другая проблема ,когда banner появлялся не в тех координатах, скорее всего , из-за того что в канвасе render mode стоит scren space - camera , но я ее решил методом подбора
kirya_355
UNIт
 
Сообщения: 106
Зарегистрирован: 09 май 2018, 21:40

Пред.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26