Я пытаюсь спавнить объект внутри канваса но он спавница неподходящего размера (слишком маленький ) Unity3d

70
04 декабря 2021, 17:10

public GameObject canvas;

public GameObject bomd;
public float speedTime; //время спавна новой бомбочки
void Start ()
{
    StartCoroutine(SpawnCoroutine());
}

IEnumerator SpawnCoroutine()
{
    while (true) //(!Player.lose)
    {
        //Instantiate(bomd, new Vector2(Random.Range(-3.30f, 3.30f), -5.9f), Quaternion.identity);
        GameObject enemy = Instantiate(bomd, new Vector2(Random.Range(-126f, 126f), -277f), Quaternion.identity);
        enemy.transform.SetParent(canvas.transform, false);
        yield return new WaitForSeconds(speedTime); //время спавна 
    }
}

}

Answer 1

на держи.Создай файл в проекте и помести в него этот класс.Затем из любого другого скрипта/класса вызовешь метод UtilityScreen.ScaleMatchWidth. Функция подгоняет масштаб спрайта под ширину экрана, то есть меняет масштаб обьекта по оси х таким образом, чтобы он занимал заданную часть ширины экрана. Масштаб по осям y и z будет установлен таким же, как и по оси х . На вход ей даёшь игровой обьект, который нужно подогнать, и число - необходимая ширина обьекта в процентах ширины экрана (при этом ширина экрана принимается за 100 %). В примере ниже твоя бомба будет иметь масштаб по оси х, равный десяти процентам от ширины экрана

GameObject bomb;
UtilityScreen.ScaleMatchWidth(bomb, 10.0f);


using UnityEngine;
using System.Collections;
public class UtilityScreen 
{
    public const float unit2meter = 2.0f;
    public const float meter2unit = 1.0f / unit2meter;
    static float s_screenWidth, s_screenHeight;
    public static Camera mainCamera;

    static UtilityScreen()
    {
        mainCamera = Camera.main;
        CalculateScreenBounds();
    }

    public static void CalculateScreenBounds()
    {
        Camera camera = mainCamera;
        Vector3 lowerLeft = camera.ScreenToWorldPoint(new Vector3());
        Vector3 upperRight = camera.ScreenToWorldPoint(
            new Vector3(camera.pixelWidth, camera.pixelHeight, 0f));
        s_screenWidth = upperRight.x - lowerLeft.x;
        s_screenHeight = upperRight.y - lowerLeft.y;
    }
    public static float GetScreenWidth()
    {
        return s_screenWidth;
    }
    public static float GetScreenHeight()
    {
        return s_screenHeight;
    }
    public static Vector2 GetScreenSize()
    {
        return new Vector2(s_screenWidth, s_screenHeight);
    }

    public static void ScaleMatchWidth(GameObject sprite, float widthPercent)
    {
        SpriteRenderer spriteRenderer = sprite.GetComponent<SpriteRenderer>();
        if(spriteRenderer == null)
        {
            //Debug.Log(
            //    "Объект " + sprite.name + " не имеет компонента SpriteRenderer");
            return;
        }
        sprite.transform.localScale = Vector3.one;
        float currentSpriteWidth = spriteRenderer.bounds.size.x;
        float finalSpriteWidth = s_screenWidth * (widthPercent / 100.0f);
        float scale = finalSpriteWidth / currentSpriteWidth;
        sprite.transform.localScale = new Vector3(scale, scale, scale);
    }
}
READ ALSO
Как получить список вещей из инвентаря Unity Steam?

Как получить список вещей из инвентаря Unity Steam?

На C# необходимо получить список вещей в инверторе SteamДля получения пытался использовать Stemworks API и Facepunch Stemworks

226
Не работает strtotime() с полученными датами

Не работает strtotime() с полученными датами

Я пытаюсь получить в функции номер текущей недели и года, а затем преобразовать его в формат с русским языком, для чего и добавил перевод месяцев...

200
Очередь отложенных сообщений

Очередь отложенных сообщений

Появилась задача, сделать демона, который будет выполнять задачи по расписаниюСначала я думал все эти задачи сохранять в таблицу и демон...

70
Вывести из базы 1 строку с шансом

Вывести из базы 1 строку с шансом

У меня есть такой запрос

215