forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

burovalex 25.02.2013 22:58

Ответ: Фак по Юнити.
 
Пакс, помнишь ты объяснил про MeshRenderer, с материалом разобрались. А как сам меш достать? не получается )

PHP код:

public class LOD MonoBehaviour {
    public 
MeshRenderer hiPolyPrefabmidPolyPrefablowPolyPrefab;
.....
//пробовал и так, и сяк
GetComponent<MeshFilter>().sharedMesh hiPolyPrefab;
GetComponent<MeshFilter>().sharedMesh hiPolyPrefab.GetComponent<MeshFilter>().sharedMesh

И всё не работает..

pax 25.02.2013 23:04

Ответ: Фак по Юнити.
 
Второй вариант должен работать...

burovalex 26.02.2013 09:18

Ответ: Фак по Юнити.
 

PHP код:

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, а переменные не переобъявил. Компиль был прав )

burovalex 05.03.2013 19:37

Ответ: Фак по Юнити.
 
Подскажите пожалуйста, мне нужен совет в реализации.
Есть динамически появляющиеся объекты, и мне надо чтобы игрок при взаимодействии с ними получал различные ресурсы, при условии что два разных дерева могут иметь один ресурс (древесина), и несколько ресурсов в одном объекте (например дерево имеет древесину и листву).

Помогите как лучше реализовать, своё имя, свой тэг, либо к объекту крепить скрипт с информацией о ресурсах.

pax 05.03.2013 20:09

Ответ: Фак по Юнити.
 
Как-то так:

PHP код:

using UnityEngine;

public class 
ResourcesContainer:MonoBehaviour
{
     public 
enum ResourceType{WoodLeavesStoneGoldetc}
     
     [
System.Serializable]
     public class 
ResourcesItem
     
{
           public 
ResourceType type;
           public 
int count;
     }

     public 
ResourcesItem[] resources;




burovalex 06.03.2013 15:14

Ответ: Фак по Юнити.
 
Спасибо Пакс! Было много вопросов, но решил на практике проверить и почти все отпали )

Получается System.Serializable задаётся для класса, и позволяет задавать значения в инспекторе для массивов этого класса?

И еще вопрос появился, для различных действий, с разными объектами такой же методой лучше пользоваться?
Разъясню, что я хочу сделать, допустим есть трава - её можно сорвать или срезать ножом, дерево - можно потрясти или срубить. Но и у разных деревьях должны быть разные характеристики, в зависимости от типа и размера.
Как думаете, подойдёт такой метод, допустим при нажатии кнопки, если у калайднутого объекта есть скрипт с набором действий, то проверять какое из существующих в нём действий выполнить.?

pax 06.03.2013 15:46

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от burovalex (Сообщение 254288)
Получается System.Serializable задаётся для класса, и позволяет задавать значения в инспекторе для массивов этого класса?

Переменная/массив/список (List<MySerializableType>)

Цитата:

Сообщение от burovalex (Сообщение 254288)
И еще вопрос появился, для различных действий, с разными объектами такой же методой лучше пользоваться?
Разъясню, что я хочу сделать, допустим есть трава - её можно сорвать или срезать ножом, дерево - можно потрясти или срубить. Но и у разных деревьях должны быть разные характеристики, в зависимости от типа и размера.
Как думаете, подойдёт такой метод, допустим при нажатии кнопки, если у калайднутого объекта есть скрипт с набором действий, то проверять какое из существующих в нём действий выполнить.?

Я бы сделал так:
1. базовый скрипт с виртуальным(или абстрактным) методом действия
2. скрипты наследники с выполнением нужного действия в этом методе (override)
3. вешаешь ан каждый объект нужные скрипты
4. при столкновении получаешь базовый скрипт с объекта и вызываешь этот метод, который у всех будет работать по разному, но вызываться одинаково

это называется полиморфизм

burovalex 06.03.2013 22:00

Ответ: Фак по Юнити.
 
Спасибо Пакс, но мне пока что override не о чем не говорит, кроме перевод слова перезапись...

Рано походу мне до такого..

pax 06.03.2013 22:43

Ответ: Фак по Юнити.
 
Думаю это прояснит ситуацию немного: http://msdn.microsoft.com/ru-ru/library/ms173152.aspx
Ну и про наследование для общего развития http://msdn.microsoft.com/ru-ru/library/ms173149.aspx

Andvrok 07.03.2013 21:44

Ответ: Фак по Юнити.
 
Можно ли проверить, есть ли какой-либо геймобжект в определенной точке пространства? Если да, то пните меня в нужном направлении, пожалуйста.

Lestar 07.03.2013 22:22

Ответ: Фак по Юнити.
 
Если только так
Код:

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;
  }
}


seaman 07.03.2013 22:34

Ответ: Фак по Юнити.
 
Цитата:

про наследование для общего развития
Наследование "на пальцах".
Цитата:

Если да, то пните меня в нужном направлении, пожалуйста.
Physics.OverlapSphere

burovalex 12.03.2013 20:18

Ответ: Фак по Юнити.
 
Подскажите правильно ли я сделал..

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

Но чтото мне подсказывает что при условии что травы будет пару сотен к примеру - ничего хорошего для производительности это не приведёт - ведь проверки нахождения в триггере будут каждый кадр проверять на каждом пучке.

Прав ли я? И что лучше сделать?

pax 12.03.2013 21:46

Ответ: Фак по Юнити.
 
Есть слои и в настройках физики можно настраивать столкновение между слоями.
http://docs.unity3d.com/Documentatio...csManager.html

Стрелять по слою травы можно используя маску с нужным слоем.

burovalex 13.03.2013 10:07

Ответ: Фак по Юнити.
 
Спасибо Пакс, помог! Только у меня луч не хочет находить конкретный слой.
Распишу: создал новый слой "JustRayCast" в первой пользовательской ячейке (User Layer 8 ) , выбрал на паре примитивов этот слой, на других оставил Default. Когда начал кастить именно этот слой - ничего не выбирает, когда Default - все выбирает.
Хотя lay = 8..
Матрицу коллизий пока не трогал

PHP код:

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/2fScreen.height/2f0);
    
lay = (int)LayerMask.NameToLayer("JustRayCast");
    }
    
    
void Update () {
    
ray Camera.main.ScreenPointToRay(screenCenter);
        
    if (
Physics.Raycast(rayout hit5flay))
        {
        
hitObject hit.collider.gameObject;
        
hitedPosition hit.collider.transform.position;
        }
    }




Часовой пояс GMT +4, время: 02:37.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot