Unity как изменить текстуру через скрипт

Suggest a change

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Your name

Your email

Suggestion*

Cancel

Switch to Manual

Declaration

public void SetTexture(string name,
Texture value);

Declaration

public void SetTexture(int nameID,
Texture value);

Parameters

nameID Property name ID, use Shader.PropertyToID to get it.
name Property name, e.g. «_MainTex».
value Texture to set.
element Optional parameter that specifies the type of data to set from the RenderTexture.

Description

Sets a named texture.

Many shaders use more than one texture. Use SetTexture to change the texture (identified by shader property name, or unique property name ID).

When setting textures on materials using the Standard Shader, you should be aware that you may need to use EnableKeyword to enable features of the shader that were not previously in use. For more detail, read Accessing Materials via Script.

Common texture names used by Unity’s builtin shaders:
"_MainTex" is the main diffuse texture. This can also be accessed via mainTexture property.
"_BumpMap" is the normal map.

The shader properties also show some of the keywords needed to set the Texture of a Material. To see this, go to your Material and right click on the Shader dropdown at the top. Next, pick Select Shader.

By specifying a `RenderTextureSubElement`, you can indicate which type of data to set from the RenderTexture. The possible options are: RenderTextureSubElement.Color, RenderTextureSubElement.Depth, and RenderTextureSubElement.Stencil.

See Also: mainTexture property, GetTexture, Shader.PropertyToID, Properties in Shader Programs, RenderTextureSubElement.

//Attach this script to your GameObject (make sure it has a Renderer component)
//Click on the GameObject. Attach your own Textures in the GameObject’s Inspector.

//This script takes your GameObject’s material and changes its Normal Map, Albedo, and Metallic properties to the Textures you attach in the GameObject’s Inspector. This happens when you enter Play Mode

using UnityEngine;

public class Example : MonoBehaviour {

//Set these Textures in the Inspector public Texture m_MainTexture, m_Normal, m_Metal; Renderer m_Renderer;

// Use this for initialization void Start () { //Fetch the Renderer from the GameObject m_Renderer = GetComponent<Renderer> ();

//Make sure to enable the Keywords m_Renderer.material.EnableKeyword ("_NORMALMAP"); m_Renderer.material.EnableKeyword ("_METALLICGLOSSMAP");

//Set the Texture you assign in the Inspector as the main texture (Or Albedo) m_Renderer.material.SetTexture("_MainTex", m_MainTexture); //Set the Normal map using the Texture you assign in the Inspector m_Renderer.material.SetTexture("_BumpMap", m_Normal); //Set the Metallic Texture as a Texture you assign in the Inspector m_Renderer.material.SetTexture ("_MetallicGlossMap", m_Metal); } }

Все параметры Материала, которые вы видите в инспектореокне Unity, в котором отображается информация о выбранном в данный момент GameObject, настройки актива или проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
See in Словарь
при просмотре материала доступны через сценарий, что дает вам возможность чтобы изменить или оживить работу материала во время выполнения.

Это позволяет изменять числовые значения Материала, менять цвета и динамически менять местами текстуры во время игры. Некоторые из наиболее часто используемых функций для этого:

Функции Name Use
SetColor Изменить цвет материала (например, цвет оттенка альбедо)
SetFloat Установите значение с плавающей запятой (например, множитель карты нормалей)
SetInt Установить целочисленное значение в материале
SetTexture Назначьте новую текстуру материалу

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

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

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

Особые требования для сценариев со стандартным шейдером

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

Эти различные типы шейдеров называются Варианты шейдераВерсия программа шейдера, которую Unity генерирует в соответствии с определенной комбинацией ключевых слов шейдера и их статусом. Объект Shader может содержать несколько вариантов шейдера. Подробнее
См. в Словарь
и можно рассматривать как все различные возможные комбинации функции шейдера, когда они активированы или не активированы.

Например, если вы решите назначить карту нормалейтип Текстура Bump Map, которая позволяет добавлять детали поверхности, такие как неровности, канавки и царапины, к модели, которые отражают свет, как если бы они были представлены реальной геометрией. Подробнее
Посмотрите в Словарь
к вашему материалу, вы активируете этот вариант шейдера, поддерживающего отображение нормалей. Если впоследствии вы также назначите карту высот, вы активируете вариант шейдера, который поддерживает сопоставление нормалей и карт высот.

Это хорошая система, потому что это означает, что если вы используете стандартный шейдер, но не используете карту нормалей в определенном материале, вы не несете затрат производительности на выполнение кода шейдера карты нормалей, потому что вы запуск варианта шейдера с опущенным кодом. Это также означает, что если вы никогда не используете определенную комбинацию функций (например, HeightMap и Emissive вместе), этот вариант полностью исключается из вашей сборки — и на практике вы, как правило, будете использовать только очень небольшое количество возможных вариантов стандартного шейдера. .

Unity избегает простого включения всех возможных вариантов шейдера в вашу сборку, потому что это будет очень большое количество, несколько десятков тысяч! Это большое число является результатом не только каждой возможной комбинации функций, доступных в инспекторе материалов, но также наличия вариантов каждой комбинации функций для разных классов рендерингаПроцесс отрисовки графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Просмотрите в Словарь
сценарии, такие как HDRширокий динамический диапазон
См. Словарь
используется, < b>карты освещенияПредварительно визуализированная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь
, GI, туман и т. д. Включение всего этого может вызвать медленная загрузка, высокое потребление памяти и увеличение размера сборки и времени сборки.

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

Это создает две отдельные проблемы при доступе к материалам через скрипт, использующий стандартный шейдер.

1. Вы должны включить правильные ключевые слова для требуемого стандартного варианта шейдера

Если вы используете сценарий для изменения Материала, который заставит его использовать другой вариант стандартного шейдера, вы должны включить этот вариант с помощью Функция EnableKeyword. Другой вариант потребуется, если вы начнете использовать функцию шейдера, которая изначально не использовалась материалом. Например, назначение карты нормалей материалу, у которого ее нет, или установка значения уровня эмиссии больше нуля, когда ранее он был равен нулю.

Конкретные ключевые слова, необходимые для включения функций стандартного шейдера, следующие:

Ключевые слова Функции
_NORMALMAP Normal Mapping
_ALPHATEST_ON Прозрачность «Вырезать» Режим рендерингаСтандартный шейдер Параметр материала, который позволяет вам выбрать, использует ли объект прозрачность, и если да, то какой тип режима наложения использовать. More info
See in Словарь
_ALPHABLEND_ON “Fade” Transparency Rendering Mode
_ALPHAPREMULTIPLY_ON “Transparent” Transparency Rendering Mode
_EMISSION Emission Colour or Emission Mapping
_PARALLAXMAP Height Mapping
_DETAIL_MULX2 Secondary “Detail” Maps (Albedo & Normal Map)
_METALLICGLOSSMAP Metallic/Smoothness Mapping in Metallic Workflow
_SPECGLOSSMAP Specular/Smoothness Mapping in Specular Workflow

Использования приведенных выше ключевых слов достаточно, чтобы ваши скриптовые модификации Материала работали во время работы в редакторе.

Однако, поскольку Unity проверяет только Материалы, используемые в вашем проекте, чтобы определить, какие варианты включить в вашу сборку, она не будет включать варианты, которые только встречаются с помощью скрипта во время выполнения.

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

2. Вы должны убедиться, что Unity включает в сборку необходимые варианты шейдеров

Для этого вам нужно убедиться, что Unity знает, что вы хотите использовать этот вариант шейдера, включив хотя бы один материал этого типа в свои активы. Материал должен использоваться в сцене или, в качестве альтернативы, помещен в вашу папку ресурсов — в противном случае Unity все равно исключит его из вашей сборки, поскольку он оказался неиспользованным. .

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

Если вам интересно узнать больше о вариантах шейдеров и о том, как написать свой собственный, прочитайте создание нескольких вариантов шейдеров здесь.

0 / 0 / 0

Регистрация: 19.09.2019

Сообщений: 30

1

Как изменить текстуру объекта через скрипт

19.09.2019, 20:51. Показов 9254. Ответов 5


Делаю игру про штампование и необходимо следующее: при нажатии на UI кнопку текстура куба должна поменяться на текстуру проштампованного документа. Подскажите как это сделать. Перепробовал множество способов, но никак не выходит. Заранее спасибо!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



250 / 186 / 68

Регистрация: 04.03.2019

Сообщений: 1,010

20.09.2019, 15:06

2

Цитата
Сообщение от Makabos
Посмотреть сообщение

Перепробовал множество способов, но никак не выходит

показывайте



1



1max1

3088 / 1617 / 921

Регистрация: 26.10.2018

Сообщений: 4,620

20.09.2019, 15:16

3

C#
1
GetComponent<Renderer>().material.mainTexture



1



76 / 54 / 22

Регистрация: 03.03.2019

Сообщений: 172

21.09.2019, 11:57

4

Добавляй на кнопку дочерний Image. И подкручивай его для разнообразия.



0



0 / 0 / 0

Регистрация: 19.09.2019

Сообщений: 30

21.09.2019, 13:34

 [ТС]

5

Можете поподробнее сказать что делать



0



76 / 54 / 22

Регистрация: 03.03.2019

Сообщений: 172

21.09.2019, 13:57

6

Лучший ответ Сообщение было отмечено Makabos как решение

Решение

В редакторе выбрать кнопку(Button). В меню(сверху) Create/UI/Image. В Image добавить рисунок штампа. Поэкспериментировать с полями дабы понять кто за что отвечает. Снять галку в поле Enable. В момент нажатия на кнопку активизировать эту галку. Купить/скачать/прочитать книгу Алана Торна «Unity в действии». Читается на одном дыхании за 3 часа.



1



In this article, we will see how to change material and its properties at runtime in a unity application.

Let’s prepare a simple scene in unity for this article. I have just added a Sphere GameObject in the empty scene.

We can apply multiple materials on a GameObject in unity. You can see these materials in the Mesh Renderer component of the GameObject.

Change Material and its properties at runtime

To change the material at runtime, add below script to the Sphere GameObject.

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    Material SphereMaterial;

// Use this for initialization

void Start () {

        SphereMaterial = Resources.Load<Material>(«SphereMaterial»);

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        // Get the current material applied on the GameObject

        Material oldMaterial = meshRenderer.material;

        Debug.Log(«Applied Material: « + oldMaterial.name);

        // Set the new material on the GameObject

        meshRenderer.material = SphereMaterial;

}

}

Change Material and its properties at runtime

We can also change the materials array from the MeshRenderer component. Actually, the GetComponent<MeshRenderer>().material property returns the first element of the materials array only.

Material[] materials = meshRenderer.materials;

// Get the current material applied on the GameObject

Material oldMaterial = materials[0];

// Set the new material on the GameObject

Material[] newMaterials = new Material[] { SphereMaterial};

meshRenderer.materials = newMaterials;

Change Material Properties at Runtime

Material properties is directly related to the shader attached to the material. You can see the shader attached to the material in the Inspector Window.

Change Material and its properties at runtime

If we create a new material then unity already attaches Standard shader to it. However, the shader attached to the material can be changed from the Inspector window and also at runtime.

The properties of the material can be changed by editing shader properties.  You can see the detailed list of Shader property in the Inspector.

Change Material and its properties at runtime

After clicking on EditShader in Inpector window, You can see the shader property name and its type (int, float, color etc.).

Change Material and its properties at runtime

Change Material and its properties at runtime

Change Texture of a Material

Change Main Texture

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    public Texture2D SampleTexture;

    private void Start()

    {

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        GetComponent<MeshRenderer>().material.mainTexture = SampleTexture;

    }

}

Change Material and its properties at runtime

Material.mainTexture is the main diffuse texture. This can also be changed by “_MainTex” property name for the texture from unity’s builtin standard shader. Many shaders uses more than one texture. In that case, make sure to use right texture property name to change it at the runtime.

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    public Texture2D SampleTexture;

// Use this for initialization

void Start () {

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        meshRenderer.material.SetTexture(«_MainTex», SampleTexture);

    }

}

You can use GetTexture property to get current main texture of the material.

meshRenderer.material.GetTexture(«_MainTex»)

Change Normal Map

Normal map can also be changed by SetTexture property of the material. “_BumpMap” is property name of the texture in the unity standard shader.

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    public Texture2D NormalMapTexture;

// Use this for initialization

void Start () {

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        meshRenderer.material.SetTexture(«_BumpMap», NormalMapTexture);

    }

}

While setting the material texture using the Standard Shader, sometime you may need to use EnableKeyword to enable features of the shader before calling SetTexture property.

meshRenderer.material.EnableKeyword(«_NORMALMAP»);

Change Metallic Texture

// if not enabled

m_Renderer.material.EnableKeyword («_METALLICGLOSSMAP»);

// set texture

meshRenderer.material.SetTexture(«_MetallicGlossMap», SampleTexture);

Change Color of the Material

Change Main material’s color

Use Material.color property to get and set the main material color.

MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

// change color to blue

meshRenderer.material.color = Color.blue;

The same can be also changed by SetColor property. “_Color” is the property name of the color in the Standard shader.

// get color

meshRenderer.material.GetColor(«_Color»);

// set color

meshRenderer.material.SetColor(«_Color», Color.blue);

Change material color at real-time

Attach below code to the GameObject.

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    public Color newColor;

    private void Update()

    {

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        meshRenderer.material.color = newColor;

    }

}

Result:

Enable Shader Property

Change Emission Values

As I mentioned earlier, some of the property should be enabled first; then only it can be changed. For example, to change the emission color, first we need to enable Emission property then it’s color can be changed.

using UnityEngine;

public class MaterialDemo : MonoBehaviour {

    private void Start()

    {

        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

        meshRenderer.material.EnableKeyword(«_EMISSION»);

        meshRenderer.material.SetColor(«_EmissionColor», Color.blue);

    }

}

Change Float Value

Many shader property can be changed using Material.SetFloat property. Example – Metaalic Range, UV Set.

Change Metallic Range

meshRenderer.material.SetFloat(«_Metallic», 0.9f);

Change Shader at runtime

Use below code to change shader at the runtime. Make sure the shader name is correct otherwise it will throw null reference exception.

Shader specularShader = Shader.Find(«Standard (Specular setup)»);

MeshRenderer meshRenderer = GetComponent<MeshRenderer>();

meshRenderer.material.shader = specularShader;

HDRP Materials

HDRP shaders has different properties name than standard unity shader. Below is the shader properties of “HDRP/Lit” shader.

So, while changing shader properties at runtime use always correct property name. For example, to change the color, use “_BaseColor” property.

MeshRenderer mr = TestGameObject.GetComponent<MeshRenderer>();

mr.material.SetColor(«_BaseColor», Color.green);

Also, while creating material make sure to pass correct shader name.

That’s it for this tutorial. I hope you get an idea about how to change material and its properties at runtime in unity application. Please post your comments for queries and feedback. Thanks for reading.

Share Button

The following two tabs change content below.

  • Bio
  • Latest Posts

Gyanendu Shekhar is a technology enthusiast. He loves to learn new technologies. His area of interest includes Microsoft technologies, Augmented reality, Virtual reality, unity3d and android development.

Добрый день.

Предыдущие уроки вы можете найти по следующим ссылкам:
Уроки B01-B03
Уроки B04-B08

Базовый Урок 09 — Добавление материалов


В уроке рассказывается, как добавлять текстуру к объекту используя материал.

Когда вы работает с игровыми объектами в Unity3d, вам потребуется также использовать материалы. Например, мы хотим добавим материал с текстурой к кубу.
B0900

Загрузить текстуру (*.png, 256px x 256px, 98.4KB).

Для начала сохраним нашу текстуру в папку Assets (в корневой папке проекта).

Добавим директорию Materials (мы помним, что всегда удобно поддерживать «иерархический порядок» в проекте) и назовем наш файл bulb texture (расширение *.png (в оригинальном уроке *.psd), см. примечание).
B0901

Переключимся назад в Unity3d, убедимся что в Project View появилась папка Materials c нашей текстурой.
B0902

Создадим куб. Добавить нашу текстуру к кубу, можно просто перетащив ее из Project View на куб (материал создастся автоматический). Но, возможно, вы захотите настроить его заранее, тогда выбираем Create->Material.
B0903

Назовем его bulb и положим в папку Materials.
B0904

Выберем buld и перенесем нашу текстуру из Project View на пустой серый квадрат в Inspector View (с надписью none(Texture 2D)), либо нажав на Select все в том же квадрате и выбрав ее из появившегося списка.
B0905

Взамен серого квадрата появится иконка с текстурой.
Перетяним наш материал на куб. Куб сразу станет текстурированным.
B0906

При выборе материала в Inspector View вы так же можете выбрать шейдер, по которому будет расчитываться его конечный вид
B0907
PS: О шейдерах мы обязательно поговорим отдельно, но много позже.

Так же у материала можно настраивать tiling (мозаичное размещение текстуры). Чем больше значения tiling по x-ой или y-ой координате, тем больше раз она повторяется по соответствующей стороне. Чтобы понять как это работает — поставте значения по x и y равным 10 (при изменении значения текстура на кубе будет обновляться в реалтайме).
B0908

Параметр offset (смещение) отвечает за сдвиг текстуры «по кругу». Чтобы лучше понять как он работает, поэкспериментируйте c ним.

Примечание

Помимо PSD, Unity3d так же поддерживает импорт следующих форматов:
TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT.
Как и при всяком наложении текстур, наиболее эффективным (для производительности) будет, если стороны текстуры являются степенью двойки (128, 256, 512, и т.д.). Но при этом не обязательно чтоб текстура была двадратной (к примеру, 256×512 допустимый размер текстуры).

Базовый Урок 10 — Основы работы с аудио


В уроке рассказывается, как проигрывать компонент Audio Source (аудио ресурс) и вызывать звуковые клипы с помощью скриптинга.

Для работы со звуком в Unity3d вам потребуются два компонента:

  • AudioListener (аудио приемник)
  • AudioSource (аудио ресурс)

Обычно AudioListener является компонентом у камеры. Выберем камеру и убедимся в этом, посмотрев в Inspector View.
b1000

Для того чтобы слушать звуки вы должны иметь хотя бы один AudioListener в каждой сцене.

Добавим пустой GameObject и добавим к нему компонент Audio Source.
b1001

Добавить аудио-клип можно либо через Inspector View, либо с помощью скрипта.

В нашем проекте есть два аудио-файла — моно и стерео.
b1002

Моно обычно используется для звуковых эффектов. Только для него можно использовать затухание или другие 3d-эффекты.
Стерео, соответственно, для музыки, т.к. стереозвук прогирывается как есть.

В окне Preview можно проиграть выбранный файл.
b1003

Добавим наш клип (GreenadeLaunch) в поле Audio Clip. Если включен параметр Play On Awake, то звук будет проигрываться сразу после запуска сцены.
b1004

Если же мы хотим, чтоб аудио-клип прозвучал в нужный нам момент, нужно написать скрипт. Оставим поле Audio Clip у Audio Source пустым и добавим c#-скрипт, назвав его PlaySounds. Добавим в скрипт следующий код:

// открытая переменная для аудиоклипа
public AudioClip myClip;
  
void Start () {
  // проигрываем наш аудиоклип
  audio.PlayOneShot(myClip);
}

Добавим скрипт к пустому GameObject, а значение переменной myClip у скрипта проиницилизируем звуковым файлом (GreenadeLaunch). Теперь нажав на play вы снова усшылите звук.

Проигрывать аудио можно и без использования Audio Source. Удалим компонент Audio Source c нашего GameObject, а код в теле метода Start() заменим следующим:

  AudioSource.PlayClipAtPoint(myClip, transform.position);

Тут, PlayClipAtPoint — статическая функция класса AudioSource, которая создает новый GameObject, с соответствующим Audio Source (в нашем случае это myClip) и после проигрывания аудио-клипа удаляет данный GameObject.

Сохраните скрипт и убедитесь что он есть у нашего GameObject, а значение myClip равно GreenadeLaunch.
b1006

Жмем Play и сразу после загрузки сцены жмем на Pause чтобы убедиться что на сцене появился новый игровой объект с именем One Shot Audio.
b1007

Базовый Урок 11 — Основы соединений


В уроке рассказывается, как использовать Fixed joint (неподвижное соединение) и Hinge joint (шарнирное соединение) для создания цепи у «шара для разрушения зданий»

Для создания интересной физики в Unity3d воспользуемся «соединениями» (joints). И для илюстрации этого создадим модель шара для разрушения зданий.

Исходная сцена содержит плоскрость (Floor), камеру (Main Camera) и точечный источник света (Point light).
Для начала создадим cферу, добавим к ней компонент Rigidbody и назовем ее Ball.
Добавим на сцену цилиндр, так же добавив к нему Rigidbody. Размер и положения цилиндра и сферы указанны на рисунке ниже. Для цилиндра scale равно 0.15, 0.25 и 0.15, для x, y и z соответственно, цилиндр свинут «вверх» к «краю» шара (грани при этом пересекаются).
b1100

Чтобы связать сферу и цилиндр — выбирете сферу (Ball) и добавьте к ней компонент Fixed Joint. Переменную Connected Body проинициализируем значением Cylinder.rigidbody. Напомню, что для этого достаточно перетащить Cylinder из Hierarchy view в Inspector View, на поле напротив Connected Body.
b1102

Переименуем Cylinder на более подходящее названия для крепежа шара, например, Ballstem. Значение переменной Connected Body поменяется автоматический.
b1103

Нажмите play и увидите как шар падает вместе с прикрепленным к нему цилиндром.
b1104

Теперь начнем создавать подвижные участки цепи.
Создадим капсулу (назовем ее Chain1), при этом размеры ее будут аналогичны размерам Ballstem’а, а находится она будет чуть выше него, чтоб крайние грани объектов пересекались. Chain1 так же будет с компонентом rigidbody.
b1105

А к Ballstem’у добавим компонент Hinge Joint, у которого
Connected Body мы инициализируем Chain1.rigidbody.
Место закрепление обозначенно ораньжевой стрелкой.
b1106

Нам потребуется еще один участок цепи. Выберем Chain1 и сделаем его дубликат (ctrl+D или cmd + D). Переименуем его в Chain2, так же сдвинув его к верхушке Chain1. К Сhain1 добавим Hinge Joint, с
Connected Body равным Chain2.rigidbody.
b1107

Аналогично добавим Chain3.

В конце, мы добавим HingeJoint к Chain3, при этом мы не будем задавать значение Connected Body. В этом случае объект будет прикрепленн «сам к себе» (точнее сказать к пустому месту в сцене).
b1108

Выделем Ball, Ballstem, Chain1, Chain2, Chain3 и наклоним их.
b1109

Жмем play и смотрим как перемещаются наш шар с цепью.

Базовый Урок 12 — Ввод с использованием виртуальных осей


В уроке рассказывается, как использовать стрелки (arrow keys), для перемещения влево и вправо, с помощью «осей» (axes)

На это раз на сцене у нас есть плоскость (floor), камера (Main Camera), источник света (Point light) и пустой gameObject.

Еще один вариант ввода — использование «осей» (Axes).
Откроем Input Manager (Edit->Project settings->Input). Разверните Axis и затем Horizontal.
b1200

Посмотрим на некоторые дефолтные параметры:

Параметр Значение Комментарий
Negative Button left Клавиша для перемещения в отрицательном направлении
Positive Button right Клавиша для перемещения в положительном направлении
Alt Negative Button a Альтернативная клавиша для перемещения в отрицательном направлении
Alt Possitive Button d Альтернативная клавиша для перемещения в положительном направлении
Type Key or Mouse Button Тип ввода, для перемещения вдоль данной оси (в нашем случае X)
Axis X axis Ось объекта, вдоль которой мы будем перемещаться

Для того, чтобы использовать данное перемещение (Horizontal), нам потребуется метод GetAxis() класса Input.

Небольшой комментарий

Дальше, чтоб каждый раз не указывать на то, что метод статический, вводятся следующие соглашения:

  1. если написано «метод класса», то предполагается что он static.
  2. если написано «метод объекта», тогда метод принадлежит конкретному объекту.

Добавим C#-скрипт, назовем его GetAxis.cs и напишем:

  private float horiz;
  
  void Update () {
    horiz = Input.GetAxis("Horizontal");
    Debug.Log(horiz);
  }

Добавим скрипт к пустому gameObject’у, и нажмем play. Если зажать стрелку влево/вправо (или же a/d), в status bar’е вы увидите как меняется значение переменной horiz:
b1201

Значение этой переменной может меняться от -1 до 1 (в зависимости от зажатой клавиши). Как только вы отпустите клавишу, horiz станет снова равен 0.

Добавим еще строчку кода в Update(), сразу за Debug.Log():

  transform.Translate(new Vector3(horiz, 0.0f, 0.0f));

Запустим сцену и нажмем на стрелку — вы увидите, как наш gameObject начнет перемещаться вдоль оси X.
b1202

Понравилась статья? Поделить с друзьями:
  • Unity как изменить разрешение экрана
  • Unity как изменить разрешение камеры
  • Unity как изменить размер сетки
  • Unity как изменить размер объекта через скрипт
  • Unity как изменить размер terrain