Доброго времени суток. Такой вопрос. Есть объект содержащий 6 дочерних объектов и есть объект - триггер. Суть задачи в том что после остановки объекта-родителя, должно менять значение у переменных дочерних объектов. Сразу пишу на объекте- триггере isTrigger активна, объекты заходят в границы коллайдера объекта-триггера. Ниже выложу код...
Код
using UnityEngine; using System.Collections;
//скрит отвечает за считываение данных с верхней стороны куба, при полной остановке куба. public class DiceTrigger : MonoBehaviour { //переменные для таймера, который отсчитывает время //для проверки остановки кубов. private float timer = 1f; private const float timerReload = 0.5f; //переменные для проверки остановки кубов. private float posX, posY, posX1, posY1, pos_01X, pos_01Y, pos_01X1, pos_01Y1; private int count = 0; private GameObject dice, dice_01;
//метод работает при вхождении в граници коллайдера объектов. void OnTriggerStay(Collider enteres){ //вспомогательные переменные. bool diceIStop = false; bool dice_01IsStop = false;
Здравствуйте.Подкиньте кто нибудь пожалуйста каких то туториалов(на русском) по работе с инспектором через скрипты.Буду очень признателен за подсказки.
Обычно присваивал уже существующие объекты как то так :
Код
class MyClass{ public string s; }
class MyClass1{ string s1 = MyClass.s; }
ну или что то подобное...потому и на тупил...
Тут вот такой вопрос.Как мне при помощи метода Vector.Lerp переместить объект по каждой позиции объектов находящихся в коллекции. Сколько объектов в коллекции определяется динамически. И текущая позиция перемещаемого объекта будет постоянно изменятся и определятся динамически. пробовал сделать что то такое.
Код
//метод для плавного перемещения фишки по поинтам. private void myLerp(GameObject chip, List<GameObject> allPoints){ //получаем индекс последней позиции фишки. int lastIndex = chip.GetComponent<ChipButton> ().currentPosIndex; //колекция для поинтов в промежутке между последней позицией фишки и будущей. List<GameObject> activeRangePoint = new List<GameObject> (); //вспомогательная переменная. int countPoint = allPoints.IndexOf (gameObject) - lastIndex; //заполняем коллекцию поинтами. activeRangePoint.AddRange (allPoints.GetRange (lastIndex, countPoint)); //перемещаем фишку по каждому поинту. foreach (GameObject point in activeRangePoint) { chip.transform.position = Vector3.Lerp(chip.transform.position, point.transform.position, Time.deltaTime* rools.getChipSpeed()); }
}
но тут получается косяк в том что в цикле foreach не дожидаясь окончательного перемещения объекта на указанную позицию происходит переход к следующему элементу коллекции... и получается так что весь цикл отрабатывает а перемещаемый объект не становится даже на первую позицию...
Доброго времени суток...Тут такая ситуация... в методе динамически объявлял обобщенную коллекцию,после определенного события добавлял в эту коллекцию объект. И вот тогда у меня вылетала ошибка NullReferenceException: Object reference not set to an instance of an object - это как я понимаю не был указан параметр в методе List<>.Add(); Решить проблему у меня получилось...но причину я как то не уловил....собственно чего и начал писать тут, объясните мне неучу почему этот вариант коллекции выдавал ошибку - List<GameObject> activeAllPoints = null; а вот этот не выдавал и все у меня заработало - List<GameObject> activeAllPoints = new List<gameObject>(); Буду очень благодарен если объясните в чем разница между этими вариантами...
ниже кусок скрипта где все это происходило.
Код
if (GameObject.FindGameObjectWithTag (ChipTag)) { //если значения кубов больше нуля. if (dice1 > (int)0 || dice2 > (int)0) { //собираем все активные фишки в коллекцию. List<GameObject> allChip = GameObject.FindGameObjectsWithTag (ChipTag).ToList (); //вызываем метод возвращающий фишку с наибольшим приоритетом. activeChip = ai.getMaxPriorityChip (allChip); //вызываем метод определения активных поинтов, в зависимости от значений кубов. ai.Move (activeChip.GetComponent<ChipButton> ().currentPosIndex, pointsCol, activeChip, GameObject.FindGameObjectsWithTag (ChipTag)); List<GameObject> activeAllPoints = new List<GameObject>();
//Debug.Log ("Значение куба1 >>>> " + dice1 + " Зачение куба2 >>>> " + dice2); foreach (GameObject point in pointsCol) { if (point.transform.FindChild ("Spotlight").GetComponent<Light> ().enabled) { //собираем все активные поинты в коллекцию. activeAllPoints.Add(point);[b] Вот тут я через дэбаг режим смотрел у меня вылетало с первым вариантом обьявления коллекции[/b] //Debug.Log ("Поинт с мндексом " + pointsCol.IndexOf (point) + " активен!!!"); } } //вызываем метод возвращающий поинт с максимальным приоритетом. GameObject activePoint = ai.checkPriorityPoint (activeAllPoints, pointsCol); activePoint.GetComponent<PointButton1> ().moveAIChip (activeChip, pointsCol); } else { endPlay (); } }
что то я посидел подумал....в первом варианте я создавал просто ссылку на коллекцию но не саму коллекцию, а во втором варианте уже создавал саму коллекцию....Правильно ли я понял?)
Сообщение отредактировал ivan2009 - Вторник, 05 Января 2016, 19:43
Здравствуйте, не могу отсортировать коллекцию, делаю все как по книжке(добавляю интерфейс IComparable<T>, и реализую метод CompareTo), компилятор не ругается но во время выполнения выдает ошибку. Скрины, и код ниже
Код
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; using System;
public class ChipButton : MoveBehaviour, IComparable<GameObject> { private List<GameObject> allPoints; private bool isActiveChip = false; private int currentPosIndex , dice, dice1; private MyParseInt1 myParse; private GameObject thisGameObject;
public int CompareTo(GameObject ob){ return gameObject.name.CompareTo (ob.name); }
спасибо, совсем вылетело из головы..:) Добрый день. Тут такое дело, динамически создаю text который идет по такой ветке canvas->inventory->slot->text при создании текст где то далеко вверху и не активен(как будто он вне канваса)...В голову не лезет что не так... скрипт и скрин ниже
Код
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI;
public class Slot : MonoBehaviour { private Stack<Item> items; public Text stackText;
public Sprite slotEmpty; public Sprite slotActive; public bool isEmpty{ get{ return items.Count == 0;} } public bool IsAvailable{ get{ return CurrentItem.maxSize > items.Count;} } public Item CurrentItem{ get{ return items.Peek ();} }
// Use this for initialization void Start () { items = new Stack<Item> (); RectTransform slotRect = GetComponent<RectTransform> (); RectTransform textRect = stackText.GetComponent<RectTransform> ();
Здравствуйте.Такое дело... при настройках rectTransform Image(UI) не могу передвигать Pivot(круг в центре картинки), он у меня полупрозрачный, когда зажимаю лкм на нем и двигаю двигается вся картинка....то ли пора мне спать идти или его где то надо включить, потому что похоже что он не активный у меня..
Здравствуйте.Тут такое дело...Есть текст который я сделал дочерним элементом персонажа, и висит он над его головой, только вот он вертится вместе с персонажем,мне надо что бы текст перемещался вместе с ним но не вертелся... скрипт ниже
Код
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class PlayerState : MyPlayerState { public int minAtack =20; public int maxAtack = 30; public float[] critChance = {0.4f, 0.6f}; public float finalDamage; public float critTextTimer = 2; private float timerCoolDown = 2; private Text text; private float atackPause = 1; private float lastTimeAtack = 0;
// Use this for initialization void Start(){ text = GameObject.Find("CritText").GetComponent<Text>(); }
Полазил посмотрел....ток чего то не понял...там у него Notice наследуется от Text, что за текст...это он сам писал скрипт и наследовался от него или же это стандартный класс в библиотеках юнити. Сейчас попробую сделать коррутину такую же... Просто я брал коррутину с документации по движку....
Здравствуйте.Есть пару вопросов. Ситуация такая персонаж вбегает в определенную зону, когда он в зоне то становится активным UI элемент (текст).На текст хочу сделать коррутину что бы менялась прозрачность текста.И вот тут бока... Скрипты ниже
активация UI элемента
Код
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class TowerSpawn : MonoBehaviour { private bool trigger; public GameObject text;
// Use this for initialization void Start () {
}
// Update is called once per frame void Update () {
if (trigger) { text.SetActive(true); } if (!trigger) { text.SetActive(false); } } public void OnTriggerEnter(Collider myCollider){ if (myCollider.CompareTag ("Player")) { trigger = true; } } public void OnTriggerExit(Collider myCollider){ if (myCollider.CompareTag ("Player")) { trigger = false; } }
}
попытка сделать коррутину на мерцание надписи
Код
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class TextFade : MonoBehaviour { Renderer rend;
Color c; // Use this for initialization void Awake () { gameObject.AddComponent<Renderer> (); rend = gameObject.GetComponent<Renderer> ();
}
// Update is called once per frame void Update () { StartCoroutine ("Fade");
} IEnumerator Fade(){ for (float f = 1f; f>=0; f-=0.1f) { c = rend.material.color; c.a = f; yield return null; } } }
в общем при динамически создаваемом рендерере когда персонаж в зоне активации UI элемента, юнити ругается мол рендерера то нету у обьекта... сам же я не знаю какой рендерер надо лепить на UI элемент, там есть canvasrenderer но у него не доступна rend.material.color; И ещё такая вот штука, по умолчанию UI элемент не активен и как бы я не писал поиск его(в первом скрипте), искал по имени,тэгу, через родителя пробовал... всегда при входе в зону активации юнити ругалось что ссылка на обьект пустая, делаю UI элемент активным по умолчанию...вся работает нормально....решилось это только после того как я ручками перетащил элемент в графу GameObject text. Мне вот интересно почему так. Буду очень признателен за помощь
Здравствуйте. Очень хотелось бы узнать про взаимодействие с UI елементами через свои скрипты, интересует как обращаться в своих скриптах к конкретному объекту UI. К примеру у меня есть skrollbar у которого есть переменные Size, Value.... Подскажите может у кого есть туториалы(на русском) на данную тему или какой то полезный материал. Буду благодарен.
Здравствуйте.Тут такое дело.Есть персонаж который бегает,стреляет.При вращении модели перса стрелки осей координат остаются на месте.Из этого получается что при спавне патрона нет теряется смысл спавнить патрон указывая позишн перса + vector3.forward, up,one всё в таком духе, персонаж вертится в игре лицом к цели а его оси нет и получается так что патрон спавнится то со спины то с боку...вобщем борода...Можно ли заставить оси вращатся вместе с персом или как то взять начальную точку координат с вектора направлния(персонаж-цель) и там спавнить патрон. И ещё такой вот вопросик...у меня на мобе оси координат расположены у ног и патрон приближаясь к нему опускается к ногам...как это поправить?