35363, Можно, для этого нужно объявить метод как статический. Статический метод не принадлежит к определенному объекту, а принадлежит классу. Пример определения и вызова:
Code
class someClass { void static someMethod () { // Делаем некотрые действия } }
Вызов
Code
// ..... Какой то код someClass.someMethod(); // ..... Какой то код
class someClass { static public void someMethod () { // Делаем некотрые действия } }
Вот так по идее... Ладно, вобщем теперь ещё один вопрос. Не получается использовать класс Transform в моей функции, почему так происходит и что нужно сделать для того чтобы он работал? Я так понял, что ошибка похожа на ту что ловил раньше, когда не ставил static перед функцией, но как тогда здесь поступить? Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
Вот так по идее... Ладно, вобщем теперь ещё один вопрос. Не получается использовать класс Transform в моей функции, почему так происходит и что нужно сделать для того чтобы он работал? Я так понял, что ошибка похожа на ту что ловил раньше, когда не ставил static перед функцией, но как тогда здесь поступить?
Экстрасенсы в отпуске. кусок кода, ошибку в студию....
Povstalez, я думал меня не сложно будет понять, есть самая обыкновенная функция на C# в юнити (она выше твоего поста). Там она пустая, я просто добавил transform.Translate/Rotate - не важно, как мне разрешить работать классу Transform в моей функции? Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
35363, Использовать transform.Translate/Rotate не возможно потому что они делают операции над объектом, который их вызвал, а так как метод статический, у него нету объекта. По идее можно сделать так:
Code
static public void someMethod() { GameObject someObj = /* ищем объект, или еще как-нибудь получаем объект над которым должны проводиться операции */ ; someObj.transform.Rotate(Vector3.right, Time.deltaTime); }
Хотя с этим кодом не уверен, а проверить не могу. Если же тебе нужно проводить операции над объектом, которого нету на сцене, то здесь вроде нету вариантов, так как объекта просто не будет существовать в пространстве игры и к нему не будет доступа. Но я могу ошибаться. Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
Сообщение отредактировал M1ghtMortal - Вторник, 20 Декабря 2011, 19:54
M1ghtMortal, а можно и по другому сделать) при вызове функции вводить string переменную с названием объекта который будем вращать...ладно, спасибо большое, отлично объяснил:) Я б запарился искать инфу на зарубежных сайтах)). Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
Вы понимаете что Вы несёте? Знаете что такое gameObject?
По моему это вы не понимаете и со зрением плоховато у вас Да там ошибка, точно не знаю т.к не проверял. Но думаю нельзя найти скрипт не висящем на го.
Добавлено (20.12.2011, 20:23) --------------------------------------------- 35363, Создай ГО scripts, и навешай на него скрипты которые тебе нужны. Еще есть наследование. И да система юнити ломает мозг Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
Сообщение отредактировал RipDev - Вторник, 20 Декабря 2011, 20:25
отлично объяснил:) Я б запарился искать инфу на зарубежных сайтах)).
Объясняю я не очень хорошо. Да и не все уже помню, так как примерно с пол года не писал под Unity3D. Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
Test t;// Test имя класса/скрипта t =gameObject.AddComponent<Test>();//добавляем компонент.
В этом случае скрипт вешать на го не надо, его просто добавляем программно.
Кстати еще вариант, простой класс, как же его не упомянули.
Code
class Test public class Test {
// Use this for initialization public int tt=100;
}
class code
Test t=new Test(); Debag.Log(t.tt);// будет 100.
Вот думаю вариантов достаточно Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
Сообщение отредактировал RipDev - Вторник, 20 Декабря 2011, 21:11
Killerbot, я в пятом классе QBasic изучал... Просто потом в другую школу перешел там программирования не было, потом снова перешел в 10 классе, и они там уже несколько лет Visual Basic изучали. Мои проекты для iOS:
public class example : MonoBehaviour { void Update() { if (Input.GetKeyUp(KeyCode.LeftArrow)) print("Key was pressed");
} }
Если нужно что бы событие вызывалось все время пока нажата кнопка, то используй Input.GetKeyDown. Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
M1ghtMortal, НЕ ТО! нужно как-бы обмануть Unity, например у объекта написаны свои обработчики на нажатие клавиш, а я хочу продублировать клавиши визуальной клавиатурой, на которую можно тыкать мышей, и чтоб при нажатии на ее кнопки (GUI-элементы) объект думал что это нажимается на клавиатуре.
Я подобные фокусы делал еще давно в Delphi посредством WinAPI. я мог делать даже передавая это другим окнам Windows по их идентификатору.
Но в Unity никакого WinAPI нет, а SendMessage - выполняет совсем другую операцию
Добавлено (21.12.2011, 12:02) --------------------------------------------- зачем мне это надо:
я измучился со всякими LERPами, SLERPами, и TRANSLATE.
Все что мне надо:
есть перс :: стандартный FPS Input Controller у которого отключено CanContol=false;
а я могу только вертеть головой, выбирая цель. Найдя нужную цель - тыкаем по ней, происходит LookAt(<цель>) и плавное движение к нему Tarnslate.forward.
добравшись до объект и столкнувшись с его триггером происходит у у моего перса <цель>=null;
Code
function OnTriggerEnter(hit:Collider) {
if (hit.gameObject.tag=="Player") { gameObject.Find("fpcr").GetComponent("SmoothLookAt").target=null; transform.localScale=Vector3(0.1,0.1,0.1); } }
function OnTriggerExit(hit:Collider) { transform.localScale=Vector3(1,1,1); }
и я опять могу вертеться выбирая новую цель.
некоторые цели включают у моего перса CanContol=true. - чтоб я мог побегать
НО!
весь косяк в том, что при движении любым методом (Lerp, Slerp, Translate.forward) наткнувшись на объект с коллайдером движение прекращается (пробовал Update, LateUpdate, FixedUpdate) недобравшись до цели (которая при уже поменяла свойства при OnMouseDown на нее и ждет столкновения с персом. А я застрял не добравшийся...
либо я пролетаю сквозь цель, а если цель близка к полу то я могу запросто провалится сквозь него в бездну.
а сам FPS Input control работает корректно. я пробовал разобраться - но там какие-то velocity, CharacterMotor... - мне сложно понять
я хочу продублировать клавиши визуальной клавиатурой, на которую можно тыкать мышей, и чтоб при нажатии на ее кнопки (GUI-элементы) объект думал что это нажимается на клавиатуре.
А это легко, даже заморачиваьтся не надо. Делай обработку в отдельной функции, а потом вызываешь ее и при нажатии кнопки и про нажатии клавиши.
Но походу вы сильно запутались, и сдается мне у вас не получится сделать по через ... .
что бы с эмулировать нажатие, придется юзать user32.dll.
либо я пролетаю сквозь цель, а если цель близка к полу то я могу запросто провалится сквозь него в бездну.
Очень похоже на 1 мою проблему с перемещением по клику. посмотри что у тебе по y, т.е перемещай персонаж только по x,z а y не трогай. Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
А как сделать, чтобы переменной рандомно давалось значение. var x = 0; А потом на экран выводилось рандомное значение x. Только чтобы это значение было в определенных пределах?
Этот метод вернет случайное число в пределах от minValue до maxValue. Это переменные типа float, возвращается он же. А если вызвать с переменными типа int, то вернется тоже целое число. Официальная справка. Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
Этот метод вернет случайное число в пределах от minValue до maxValue. Это переменные типа float, возвращается он же. А если вызвать с переменными типа int, то вернется тоже целое число.
Что Вам еще нужно?
Сообщение отредактировал seaman - Пятница, 23 Декабря 2011, 18:59