Воскресенье, 24 Ноября 2024, 11:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
LertmindДата: Пятница, 01 Июля 2016, 17:29 | Сообщение # 201 | Тема: Докс файл поврежден
заслуженный участник
Сейчас нет на сайте
Если не отключал функцию, то Word должен был делать резервные копии каждые несколько минут, читай как восстановить https://support.microsoft.com/en-us/kb/316951. Всегда делай резервные копии важных файлов.

Сообщение отредактировал Lertmind - Пятница, 01 Июля 2016, 17:31
LertmindДата: Пятница, 01 Июля 2016, 13:42 | Сообщение # 202 | Тема: Выпуклость
заслуженный участник
Сейчас нет на сайте
Это вопрос к математикам. Точную формулу не получить, из похожих с логарифмом или степенной функцией. Вот пример:
Код
    public static float Circle(int x, int y, int size)
    {
        float d = Vector2.Distance(new Vector2(size / 2, size / 2), new Vector2(x, y));
        float radius = size / 2f;
        d = radius * 0.8f - d;
        d = Mathf.Clamp(d, 0f, radius * 0.7f);
        d = Mathf.Pow(d * 6, 0.6f);
        return d;
    }


В Unity лучше использовать AnimationCurve, если объявить поле в скрипте этого типа, то через Инспектор можно будет задать кривую, а в коде использовать метод Evaluate, чтобы определять любое сечение купола.

Добавлено (01 июля 2016, 13:42)
---------------------------------------------
Если интересно, вот так использовал AnimationCurve:
Код
using UnityEngine;

public class Deformation : MonoBehaviour
{
    public AnimationCurve Curve;

    void Start()
    {
        Mesh mesh = GetComponent<MeshFilter>().mesh;
        Vector3[] vertices = mesh.vertices;
        for (int i = 0; i < vertices.Length; i++) {
            var v = vertices[i];
            float z = Circle((int)v.x, (int)v.y, 100);

            vertices[i] += new Vector3(0f, 0f, z);
        }
        mesh.vertices = vertices;
        mesh.RecalculateNormals();
    }

    public float Circle(int x, int y, int size)
    {
        float d = Vector2.Distance(new Vector2(size / 2, size / 2), new Vector2(x, y));
        float radius = size / 2f;
        float maxDistance = radius * 0.8f;
        d = maxDistance - d;
        d = Mathf.Max(0f, d);
        d = maxDistance * Curve.Evaluate(d / maxDistance);
        return d;
    }
}



Сообщение отредактировал Lertmind - Пятница, 01 Июля 2016, 13:42
LertmindДата: Четверг, 30 Июня 2016, 23:54 | Сообщение # 203 | Тема: Замена объекта при столкновении.
заслуженный участник
Сейчас нет на сайте
Я не это спросил, по второму предложению можно было понять, что говорится про то, каким образом ты хочешь задавать другой объект.

Судя по всему, ты хочешь сделать майнкрафт, тогда таким образом будет глупо делать. В майнкрафте ресурсы "выпадают", а не "превращаются", соответственно внешне должно выглядеть по-другому, и там не проверяется столкновение, а скорее всего просто рассчитывается воображаемое расстояние инструмента в руке и на основе этого определяется подвергается ли предмет действию, при этом анимация инструмента для красоты и нет на нём коллайдеров, если только для особых случаев или в реалистичных играх.

Добавлено (30 июня 2016, 23:54)
---------------------------------------------
В общем, вот скрипт с тегом:

Код
using UnityEngine;

public class Transformation : MonoBehaviour
{
    public GameObject SwapObject;
    public string CollisionTag;

    void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.CompareTag(CollisionTag))
        {
            Instantiate(SwapObject, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
    }
}

Задаёшь например тег "Axe" во втором свойстве и у топора ставишь тег "Axe".


Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 23:35
LertmindДата: Четверг, 30 Июня 2016, 21:19 | Сообщение # 204 | Тема: Замена объекта при столкновении.
заслуженный участник
Сейчас нет на сайте
Что ты хочешь во второй переменной? Строка с именем объекта, строка с тегом объекта, конкретный объект на сцене?

Добавлено (30 июня 2016, 21:19)
---------------------------------------------
Без второй переменной скрипт выглядит так:
Код
using UnityEngine;

public class Transformation : MonoBehaviour
{
    public GameObject SwapObject;

    void OnCollisionEnter(Collision other)
    {
        Instantiate(SwapObject, transform.position, Quaternion.identity);
        Destroy(gameObject);
    }
}

Предполагается, что у объекта, который врезается есть Rigidbody (с отключенным isTrigger и отключенным isKinematic), а у объекта который превращается есть как минимум Collider с отключенным isTrigger. Хотя сам решишь как они врезаются, главное знай когда происходит OnCollisionEnter().


Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 21:23
LertmindДата: Четверг, 30 Июня 2016, 20:56 | Сообщение # 205 | Тема: Замена объекта при столкновении.
заслуженный участник
Сейчас нет на сайте
Это же элементарно, в OnTriggerEnter() или OnCollisionEnter() делается Instantiate() объекта из переменной и удаляется сам объект через Destroy().
LertmindДата: Четверг, 30 Июня 2016, 20:39 | Сообщение # 206 | Тема: Как сделать кнопку включения и отключения звука в сцене?
заслуженный участник
Сейчас нет на сайте
Создаёшь в иерархии кнопку (UI -> Button), удаляешь дочерний объект Text, у объекта Button в компоненте Image ставишь Source Image спрайт с включённым звуком, Image Type меняешь на Simple, добавляешь этот скрипт на объект Button:

В этом скрипте ставишь в Enable Sprite спрайт включённого звука, в Disable Sprite - выключенного. В компоненте Button нажимаешь внизу плюсик, перетаскиваешь объект Button где кружок с точкой и выбираешь функцию AudioButton.SwitchAudio.

Скрипт простой и только отключает звук у слушателя (AudioListener), по-хорошему нужно использовать аудио менеджер, также он предполагает, что звук вначале всегда включен, чтобы сохранять состояние звука необходимо использовать систему сохранений.


Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 20:42
LertmindДата: Четверг, 30 Июня 2016, 18:26 | Сообщение # 207 | Тема: Как анимировать дочерние объекты в юнити?
заслуженный участник
Сейчас нет на сайте
beril, проще добавить пустой объект в центре вращения и добавить ему дочерний объект, который надо вращать. Какой вариант лучше выбирать по ситуации.

Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 18:27
LertmindДата: Четверг, 30 Июня 2016, 15:42 | Сообщение # 208 | Тема: Совместить 2 тектуры по маске Grayscale
заслуженный участник
Сейчас нет на сайте
andarky, это называется Texture splatting или просто Texture blending. В террейне Unity реализовано примерно так: есть текстура для смешивания, в ней каждая компонента R, G, B, A хранит коэффициенты для текстур, которые будут смешиваться, то есть за один проход шейдера смешиваются 4 текстуры, дополнительные текстуры требуют больших проходов и соответственно уменьшают производительность. В книге "Unity 5.x Shaders and Effects Cookbook - Alan Zucconi, Kenneth Lammers - 2016" есть пример в разделе "Packing and blending textures". Вот простой шейдер (две текстуры, последняя маска) https://gist.github.com/Opotable/ade3a97fb9112c87da6c.

Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 15:59
LertmindДата: Среда, 29 Июня 2016, 14:00 | Сообщение # 209 | Тема: Blender & BGE [Вопрос - ответ]
заслуженный участник
Сейчас нет на сайте
Цитата ИльяНедогонов ()
а через двоеточие числовые параметры этих объектов?
Никакого смысла там не кроется, может быть объект любого типа.
Цитата ИльяНедогонов ()
Попытался во вторую строку «пристроить» objList таким образом:
Я писал, что этот код подходит, если объект точно существует, иначе можно так написать:
Код
names = ["Mishen", "Snarjad", "Vspyshka"] # Имена объектов
for name in names:
   if name in objList: # Среди активных
      print("{} is active".format(name))
   elif name in objList2: # Среди неактивных
      print("{} is inactive".format(name))
   else: # Не существует
      print("{} don't exist".format(name))

Цитата ИльяНедогонов ()
В предложенных вами ссылках подходящего ничего не нашёл
Я давал только одну ссылку https://www.blender.org/api/blender_python_api_current/ - документация по Blender API, там указаны все классы, методы и тому подобное, которые есть в Blender, очевидно там нет ответа на ваш вопрос, потому что это вопрос алгоритма.
Цитата ИльяНедогонов ()
Что такое ".format(name)" в операторе print?
"{} is active" - строка, значит format() - метод строки. Строка - встроенный тип языка Python, следовательно читать про него надо в официальной документации https://docs.python.org/3/library/stdtypes.html#str.format. Если коротко, то это метод для форматирования строки, например число можно вывести в шестнадцатеричной системе счисления или указать количество знаков после точки в вещественном числе.
Кстати, print в Python 3 - функция, а в Python 2 - инструкция (тоже что оператор).

Добавлено (29 июня 2016, 14:00)
---------------------------------------------
ИльяНедогонов, как я уже говорил, тебе необходимо изучить основы Python, чтобы не застревать в простых местах.

LertmindДата: Вторник, 28 Июня 2016, 11:37 | Сообщение # 210 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
Бозингар, вариант с условиями подходит в простых ситуациях. В "UI" такой проблемы нет, там можно просто включать/отключать объекты, что похоже на то, что ты делал, то есть изобретал велосипед, вместо того чтобы пользоваться современных "UI". Мог бы пойти дальше: сделать универсальные скрипты для каждого элемента интерфейса и объединять их с помощью GameObject.
LertmindДата: Понедельник, 27 Июня 2016, 22:22 | Сообщение # 211 | Тема: Рейкаст от объекта к объекту
заслуженный участник
Сейчас нет на сайте
Valik_Fenko, Transform.root - самый верхний в иерархии transform. Если нет родителей, то вернёт себя.

Добавлено (27 июня 2016, 22:22)
---------------------------------------------
Кстати, твой код работает и на Transform pParent = transform; никто не ругается, но такой костыль лучше было так написать:

Код
using UnityEngine;
public class RootTransform : MonoBehaviour
{
    void Start()
    {
        Transform parent = transform;
        while (parent.transform.parent != null)
            parent = parent.transform.parent;
        print(parent.name);
    }
}


Сообщение отредактировал Lertmind - Понедельник, 27 Июня 2016, 21:05
LertmindДата: Понедельник, 27 Июня 2016, 18:13 | Сообщение # 212 | Тема: Blender & BGE [Вопрос - ответ]
заслуженный участник
Сейчас нет на сайте
Цитата ИльяНедогонов ()
если мне необходимо несколько объектов проверять, например десяток, то как мне лучше эту проверку оформить?
Зависит от того, что ты хочешь на выходе получить и для какой цели. В любом случае, будет использоваться итерация по нужным именам объектов, простой пример:
Код
names = ["1", "2", "3"] # Имена объектов
objects = { "1" : 10, "3": 30, "4" : 40 } # Активные объекты
for name in names:
    if name in objects:
        print("{} is active".format(name))
    else:
        print("{} is inactive".format(name))

Выведет:
Код
1 is active
2 is inactive
3 is active

Если ты знаешь, что объект точно есть, то нет смысла проверять в неактивных, иначе делаешь проверку и среди активных.
Цитата ИльяНедогонов ()
И ещё, может, посоветуете источники информации для совсем-совсем начинающих о написании скриптов на Python для BGE.
Сначала подучи Python, почитай книгу или статьи в интернете. Твоя ошибка была элементарно в незнании языка, а не BGE. Я BGE не знаю и какого-то хорошего источника не знаю. Что вообще есть в API, очевидно надо смотреть в документации https://www.blender.org/api/blender_python_api_current/, материалов по BGE на английском ищется порядочно, про русский не знаю.


Сообщение отредактировал Lertmind - Понедельник, 27 Июня 2016, 18:15
LertmindДата: Понедельник, 27 Июня 2016, 15:07 | Сообщение # 213 | Тема: Blender & BGE [Вопрос - ответ]
заслуженный участник
Сейчас нет на сайте
ИльяНедогонов, чтобы узнать есть ли ключ в словаре можно использовать оператор in:
Код
d = {"a" : 1, "b" : 2 }
if "a" in d:
    pass

Ты же сравнивал словарь со списком, вот правильный код:
Код
import bge
cont = bge.logic.getCurrentController()
scene = bge.logic.getCurrentScene()
objList = scene.objects
objList2 = scene.objectsInactive

name = "Snarjad"
if name in scene.objects:
    objSnarjad = objList[name]
    print("objList Snarjad = true")
elif name in scene.objectsInactive:
    objSnarjad = objList2[name]
    print("objList2 Snarjad = true")

print("Scrept Dvigenie Snarjada")
print("objSnarjad.worldPosition = ", objSnarjad.worldPosition)


Сообщение отредактировал Lertmind - Понедельник, 27 Июня 2016, 15:14
LertmindДата: Понедельник, 27 Июня 2016, 11:09 | Сообщение # 214 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
GameBit, пример проекта видел OpenIAB-sample-game? Так вот в ShopDemo.cs видим:
Код
private void OnBillingSupported()
{
    Debug.Log("Billing is supported");
    OpenIAB.queryInventory(new string[] { SKU_PREMIUM_SKIN, SKU_GOD_MODE, SKU_REPAIR_KIT });
}

OpenIAB.queryInventory() позволяет сделать запрос со списком SKU, которые нужны, а в обработчике события ниже получаем список продуктов:
Код
private void OnQueryInventorySucceeded(Inventory inventory)
{
    Debug.Log("Query inventory succeeded: " + inventory);
    // ...
}

В этом методе можно написать:
Код
inventory.GetSkuDetails(SKU).Price

OpenIAB.queryInventory() можно вызывать в любом месте кода, после чего получать список через обработчик, а OnBillingSupported() вызывается в OpenIAB.init(options);, то есть в данном примере при инициализации сразу получаем список продуктов.
Разбирался только с помощью поиска и исходников, не проверял в проекте, но работать должно.
LertmindДата: Понедельник, 27 Июня 2016, 02:21 | Сообщение # 215 | Тема: Firefox намертво зависает
заслуженный участник
Сейчас нет на сайте
В режиме без дополнений запускал? Всегда стоит указывать ОС.
LertmindДата: Пятница, 24 Июня 2016, 14:28 | Сообщение # 216 | Тема: Промокоды и скидки на Игры, Софт и пр. товары
заслуженный участник
Сейчас нет на сайте
TLT, вот это прикол, заходим в стим:
Warhammer 40000: Dawn of War II: Retribution
-75% 257 руб
Alien: Isolation Collection
-75% 499 руб
Total War Grand Master Collection
-75% 1584 руб
LertmindДата: Четверг, 23 Июня 2016, 20:57 | Сообщение # 217 | Тема: Не отображается дочерний объект в префабе
заслуженный участник
Сейчас нет на сайте
Посмотрю, если кинешь проект со сценой после добавления объекта в префаб, когда у тебя происходит исчезновение.
LertmindДата: Четверг, 23 Июня 2016, 14:58 | Сообщение # 218 | Тема: Координаты объекта
заслуженный участник
Сейчас нет на сайте
В скрипте Mouse.py можно установить свойства так:
Код
scene.objects["Text"]["Text"] = pos.y
scene.objects["Text.001"]["Text"] = pos.x

Тогда в верхнем тексте (Text.001) будет координата X, а в нижнем (Text) - Y.
Вот весь скрипт:
Код
##                    ##
# Script de projection de la souris #
#   Par Bobibou                     #
##                    ##
# Licence libre !                   #
##                    ##

## Know bugs :
# - Il y a des saccades lorsque le curseur est trop gros

from bge import logic as gl

cont = gl.getCurrentController()
own = cont.owner # Fond

scene = gl.getCurrentScene()
curseur = scene.objects["Curseur"]

mouse = cont.sensors["Over"]

if mouse.positive : # Si la souris est devant le fond
    pos = mouse.hitPosition # Point d'impact
    curseur.position = pos
    
    scene.objects["Text"]["Text"] = pos.y
    scene.objects["Text.001"]["Text"] = pos.x

Кстати, почему слова французские?:)
LertmindДата: Четверг, 23 Июня 2016, 12:21 | Сообщение # 219 | Тема: OpenGl es 3.0, Gl 4 у кого есть?
заслуженный участник
Сейчас нет на сайте
На русском этих книг нет в инете. Лучше прочитай в оригинале.
LertmindДата: Четверг, 23 Июня 2016, 11:05 | Сообщение # 220 | Тема: [2D] GearArkanoid - Арканоид
заслуженный участник
Сейчас нет на сайте
Полоски здоровья стоит избегать, они портят внешний вид. В данной игре можно их вообще убрать и оставить только у босса.
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг