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