 |
Unity Мультиплатформенный инструмент для разработки игр |
25.02.2013, 22:58
|
#946
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Пакс, помнишь ты объяснил про MeshRenderer, с материалом разобрались. А как сам меш достать? не получается )
public class LOD : MonoBehaviour { public MeshRenderer hiPolyPrefab, midPolyPrefab, lowPolyPrefab; ..... //пробовал и так, и сяк GetComponent<MeshFilter>().sharedMesh = hiPolyPrefab; GetComponent<MeshFilter>().sharedMesh = hiPolyPrefab.GetComponent<MeshFilter>().sharedMesh;
И всё не работает..
__________________
|
(Offline)
|
|
25.02.2013, 23:04
|
#947
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Второй вариант должен работать...
|
(Offline)
|
|
26.02.2013, 09:18
|
#948
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
GetComponent<MeshFilter>().sharedMesh = hiPolyPrefab.GetComponent<MeshFilter>().sharedMesh;
MissingReferenceException: The variable hiPolyPrefab of 'LOD' doesn't exist anymore.
You probably need to reassign the hiPolyPrefab variable of the 'LOD' script in the inspector.
UnityEngine.Component.GetComponent[MeshFilter] () (at C:/BuildAgent/work/812c4f5049264fad/Runtime/ExportGenerated/Editor/UnityEngineComponent.cs:132)
Извиняюсь, я сначала в скрипте написал Mesh, объявил префабы, потом заменил Mesh на MeshRenderer, а переменные не переобъявил. Компиль был прав )
__________________
|
(Offline)
|
|
05.03.2013, 19:37
|
#949
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Подскажите пожалуйста, мне нужен совет в реализации.
Есть динамически появляющиеся объекты, и мне надо чтобы игрок при взаимодействии с ними получал различные ресурсы, при условии что два разных дерева могут иметь один ресурс (древесина), и несколько ресурсов в одном объекте (например дерево имеет древесину и листву).
Помогите как лучше реализовать, своё имя, свой тэг, либо к объекту крепить скрипт с информацией о ресурсах.
__________________
|
(Offline)
|
|
05.03.2013, 20:09
|
#950
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Как-то так:
using UnityEngine;
public class ResourcesContainer:MonoBehaviour { public enum ResourceType{Wood, Leaves, Stone, Gold, etc} [System.Serializable] public class ResourcesItem { public ResourceType type; public int count; }
public ResourcesItem[] resources;
}
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.03.2013, 15:14
|
#951
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Спасибо Пакс! Было много вопросов, но решил на практике проверить и почти все отпали )
Получается System.Serializable задаётся для класса, и позволяет задавать значения в инспекторе для массивов этого класса?
И еще вопрос появился, для различных действий, с разными объектами такой же методой лучше пользоваться?
Разъясню, что я хочу сделать, допустим есть трава - её можно сорвать или срезать ножом, дерево - можно потрясти или срубить. Но и у разных деревьях должны быть разные характеристики, в зависимости от типа и размера.
Как думаете, подойдёт такой метод, допустим при нажатии кнопки, если у калайднутого объекта есть скрипт с набором действий, то проверять какое из существующих в нём действий выполнить.?
__________________
|
(Offline)
|
|
06.03.2013, 15:46
|
#952
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Сообщение от burovalex
Получается System.Serializable задаётся для класса, и позволяет задавать значения в инспекторе для массивов этого класса?
|
Переменная/массив/список (List<MySerializableType>)
Сообщение от burovalex
И еще вопрос появился, для различных действий, с разными объектами такой же методой лучше пользоваться?
Разъясню, что я хочу сделать, допустим есть трава - её можно сорвать или срезать ножом, дерево - можно потрясти или срубить. Но и у разных деревьях должны быть разные характеристики, в зависимости от типа и размера.
Как думаете, подойдёт такой метод, допустим при нажатии кнопки, если у калайднутого объекта есть скрипт с набором действий, то проверять какое из существующих в нём действий выполнить.?
|
Я бы сделал так:
1. базовый скрипт с виртуальным(или абстрактным) методом действия
2. скрипты наследники с выполнением нужного действия в этом методе (override)
3. вешаешь ан каждый объект нужные скрипты
4. при столкновении получаешь базовый скрипт с объекта и вызываешь этот метод, который у всех будет работать по разному, но вызываться одинаково
это называется полиморфизм
|
(Offline)
|
|
06.03.2013, 22:00
|
#953
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Спасибо Пакс, но мне пока что override не о чем не говорит, кроме перевод слова перезапись...
Рано походу мне до такого..
__________________
|
(Offline)
|
|
06.03.2013, 22:43
|
#954
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.03.2013, 21:44
|
#955
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Фак по Юнити.
Можно ли проверить, есть ли какой-либо геймобжект в определенной точке пространства? Если да, то пните меня в нужном направлении, пожалуйста.
|
(Offline)
|
|
07.03.2013, 22:22
|
#956
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Фак по Юнити.
Если только так
GameObject[] goCollection = FindObjectsOfType(typeof(GameObject)) as GameObjectt[];
for(int i=0; i<goCollection.Lenght; i++)
{
if(goCollection[i].transform.position == foundPosition)
{
Debug.Log("Profit");
break;
}
}
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.03.2013, 22:34
|
#957
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Фак по Юнити.
про наследование для общего развития
|
Наследование "на пальцах".
Если да, то пните меня в нужном направлении, пожалуйста.
|
Physics.OverlapSphere
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо seaman за это полезное сообщение:
|
|
12.03.2013, 20:18
|
#958
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Подскажите правильно ли я сделал..
У меня есть трава, которая растет пучками и с которым мне надо взаимодействовать по наведению на нее.
Решил использовать луч от центра экрана, но чтобы "колайднуть" траву, ей приходится создавать коллайдер, а чтобы игрок не врезался в траву - сделал её триггером.
Но чтото мне подсказывает что при условии что травы будет пару сотен к примеру - ничего хорошего для производительности это не приведёт - ведь проверки нахождения в триггере будут каждый кадр проверять на каждом пучке.
Прав ли я? И что лучше сделать?
__________________
|
(Offline)
|
|
12.03.2013, 21:46
|
#959
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Есть слои и в настройках физики можно настраивать столкновение между слоями.
http://docs.unity3d.com/Documentatio...csManager.html
Стрелять по слою травы можно используя маску с нужным слоем.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.03.2013, 10:07
|
#960
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Спасибо Пакс, помог! Только у меня луч не хочет находить конкретный слой.
Распишу: создал новый слой "JustRayCast" в первой пользовательской ячейке (User Layer 8 ) , выбрал на паре примитивов этот слой, на других оставил Default. Когда начал кастить именно этот слой - ничего не выбирает, когда Default - все выбирает.
Хотя lay = 8..
Матрицу коллизий пока не трогал
using UnityEngine; using System.Collections;
public class Look : MonoBehaviour { public Ray ray; public RaycastHit hit; public Vector3 screenCenter; public int lay; public GameObject hitObject; public Vector3 hitedPosition;
void Start () { screenCenter = new Vector3(Screen.width/2f, Screen.height/2f, 0); lay = (int)LayerMask.NameToLayer("JustRayCast"); } void Update () { ray = Camera.main.ScreenPointToRay(screenCenter); if (Physics.Raycast(ray, out hit, 5f, lay)) { hitObject = hit.collider.gameObject; hitedPosition = hit.collider.transform.position; } } }
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:23.
|