 |
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
15.08.2012, 22:33
|
#586
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Попробуй двигать лифт в FixedUpdate и еще увеличить массу объекта.
|
(Offline)
|
|
16.08.2012, 00:26
|
#587
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
двигался он анимацией. достаточно было просто на лифт повесить rigid body)
кстати, не знаешь как в играх от третьего лица прицел игрока и камеры смотрит в одну точку? тут либо камера поворачивается туда куд попадает луч от прицела игрока. либо игрок поворачивается туда куда смотрит камера. но игрока поворачивать по моему не правильно. да и пучкать придется довольно длиный луч каждый кадр, что тоже не гуд.
|
(Offline)
|
|
16.08.2012, 00:34
|
#588
|
ПроЭктировщик
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений (для 64 пользователей)
|
Ответ: Вопросы от новичка
Вот тут есть на тему поворота камеры и прицела: Перейти на Unity3D.com
|
(Offline)
|
|
16.08.2012, 03:19
|
#589
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: Вопросы от новичка
Пример:
using UnityEngine;
public class example : MonoBehaviour {
// объект, на который должен смотреть текущий объект
public Transform target;
// смотрим на цель всегда
void Update() {
transform.LookAt(target);
}
}
|
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
public int Health = 100;
public GameObject Player;
public Transform target2;
void Start () {
targer2 = GameObject.Find("Main Camera").GameObject;
}
void Update()
{
transform.LookAt(target2);
// хочу направить один объект на другой. что это за куча точек блеадь?
// что значит все эти постоянные "transoform"
// КАКИЕ тут блядь есть типы объектов?
// моя логика:
// раз тут у каждого объекта СВОЙ скрипт, то :
// this.rotation = pointToentity("Main camera");
//все блеадь. что тут еще надо? растолуйте мне эту логику!я в пятый ра пытаюсь сесть и заставить себя учить юанйт,
// но нигде нету нормального учебника по коду. толи я НАСТОЛЬКО привык к блицу, толи не понимаю я эту логику.
// расстолуйте.
}
}
|
Собственно, я на психе.
Например, все-таки направили один объект на другой.
Теперь задача - заставить его двигаться прямо. сначала заставим двигаться прямо по глобальным координатам. потом, в зависимости от собственного поворота. а теперь заставим рандомно двигаться - то влево, то вправо, то назад в зависимости от собственного поворота. при чем, как общего, так только и по горизонтальному направлению.
Напишите такие простые примеры - желательно, с комментариями, кому не лень.
Я в упор не могу понять эту систему.
// расчет поворота вокруг оси Y с учетом пройденноговремени с прошедшего кадра
Quaternion rotation = Quaternion.AngleAxis(RotationSpeed*Time.deltaTime, Vector3.up);
// применение вращения
transform.rotation *= rotation;
|
арр, что это.
что за Quaternion.AngleAxis? что за RotationSpeed*Time.deltaTime, Vector3.up?
Я, конечно, все понимаю, что тут написано. Но блин, где TurnEntity(0,0,1) ? И все?
Зачем столько сложностей?
Как это все тут устроено? Что за вектор3? Откуда такое большое постоянно количество точек?
Если для того, чтобы просто повернуть объект - я уже застопорился, то ...
Как тут написать, например, поиск пути в 3д пространстве? Например?
Блин, хочу тутор, начиная от синтаксиса, заканчивая этими банальными командами.
А то все туторы, что читал - только запутывают. pax, добавь в аську, я тебя немного по достаю.
И да, я не хочу лезть в дерби этих всех тем - наверняка, я такой не первый.
|
(Offline)
|
|
16.08.2012, 03:48
|
#590
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Вопросы от новичка
transform.localEulerAngles += new Vector3(30.0f, 0.0f, 0.0f);
Вот для привычных градусов.
Но есть ограничения, лучше использовать кватернионы.
Надо повернуть объект направно (то есть вокруг оси Y, так как она напрваленна вверх) на 30 градусов:
Quaternion rightRotation = Quaternion.AngleAxis(30.0f, Vector3.up);
transform.rotation = transform.rotation * rightRotation;
Для создания сложных вращений кватернионы перемножаются. Порядок умножения имеет значение: в моем примере объект будет поворачиваться относительно локальной оси Y, если написать transform.rotation = rightRotation * transfrom.rotation, тогда объект будет поворачиваться относительно глобальной оси Y.
Что за вектор3? Откуда такое большое постоянно количество точек?
|
Какие еще точки? Это C#, не блитз. Vector3 - класс, описывающий 3д вектор. Векторы используются для обозначения позиции, скорости, ускорения, силы и т.д. Также в методе Quaternion.AngleAxis вектор используется для обозначения оси, вокруг которой производится вращение.
Теперь задача - заставить его двигаться прямо. сначала заставим двигаться прямо по глобальным координатам. потом, в зависимости от собственного поворота.
|
Курсоры (или WASD) вправо/влево - "двигаться прямо", вверх/вниз - "двигаться прямо учитывая собственное вращение"
using UnityEngine;
public class TestLookAt : MonoBehaviour
{
public Transform TargetObject;
void Start()
{
}
void Update()
{
transform.LookAt(TargetObject);
transform.position += transform.forward*Input.GetAxis("Vertical")*Time.deltaTime*30.0f;
transform.position += Vector3.forward*Input.GetAxis("Horizontal")*Time.deltaTime*30.0f;
}
}
"Сложности" созданы для удобства, как бы странно это не казалось.
__________________
Последний раз редактировалось h1dd3n, 16.08.2012 в 04:56.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.08.2012, 14:31
|
#591
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от Данил
pax, добавь в аську, я тебя немного по достаю.
|
Эм, ты у меня в контактах.
По порядку:
1. Каждый объект сцены имеет компонент Transform, который отвечает за ориентацию объекта в пространстве.
2. Получить компонент Transform в скрипте можно следующими способами: - просто свойство transform
- тоже самое this.transform
- GetComponent<Transform>()
3. Vector3 - это набор из трех координат (x,y,z). Используется для описания положения, направления или вращения (по каждой из осей).
4. Вектора можно складывать, вычитать:
Vector3 pos1 = new Vector3(1,2,3); Vector3 pos2 = new Vector3(3,2,1); Vector3 pos3 = pos1 + pos2; // (4,4,4)
5. В общем Vector3 этот вектор, который проходят в школе. Можно выполнять такие операции как скалярное произведение, векторное произведение, умножение вектора на число, длина вектора (расстояние между двумя точками можно определить как (pos2 - pos1).magnitude или Vector3.Distance(pos1,pos2))
6. Кватернионы это боле сложная структоура - комплексный вектор. О них просто надо думать как о вращении.
7. trnasform.rotation - вращение объекта заданное кватернионом.
8. transform.eulerAngles - вращение заданное вектором в градусах.
9. transform.position - глобальная позиция
10. transform.rotation - глобальное вращение
11. transform.localRotation - локальное вращение
12. transform.localEulerAngles - локальные углы поворота в градусах.
13. transfrom.localPosition - локальная позиция.
14. пользоваться углами Эйлера сложно, т.к. часто они не превышают 180 или 360 градусов и меняются.
15. пользоваться надо кватернионами.
16. Вращать объект так же можно через transform.Rotate()
17. Перемещать объект можно через transfrom.Translate()
18. 16 и 17 аналогичны блицевским командам и принимают последним параметром пространство (Space.Self или Space.World). Честно скажу, что ими не пользовался ни разу.
19. transfrom.localScale - масштаб объекта (обычно Vector3(1,1,1)).
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
16.08.2012, 15:12
|
#592
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Кстати можешь для себя написать базовый класс, унаследованный от MonoBehaviour и в нем определить методы, которые тебе надо использовать без обращения к траносформу:
public class MyBehaviour: MonoBehavoiur { public void TranslateLocal(float x, float y, float z) { transform.Translate(x,y,z, Space.Self); }
public void TranslateGlobal(float x, float y, float z) { transform.Translate(x,y,z, Space.World); } }
Потом использовать:
public class MyScript: MyBehaviour { public void Update() { TranslateLocal(Time.deltaTime, 0, 0); } }
Кстати появилась мысль для блицеров такой класс написать, где собрать часть команд с теми же именами, что и на блице 
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
16.08.2012, 15:36
|
#593
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: Вопросы от новичка
о, это хорошая идея) модуль в юнайте )
transform.Translate(x,y,z, Space.Self);
о. что за спейс.селф 
например, подставил х=1 - афигеть, теперь у меня кубик движется!!
подставил -1 -он куда-то резко улетел 
|
(Offline)
|
|
16.08.2012, 15:47
|
#594
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Self - локальные координаты.
Чтобы двигать с учетом времени, надо умножать на Time.deltaTime
transform.Translate(1 * Time.deltaTime, 0, 0, Space.Self);
Update вызывается каждый кадр.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.08.2012, 16:24
|
#595
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Как много морок с этим андроидом, пока управление сделаешь - повешаться можно.
Настрочил код, который крутит что нужно за пальцем:
v_old = v_cur; //пальчиком по кругу if (ControlMode == 0 && Input.touches.Length == 1) { Touch touch = Input.touches[0]; if (touch.phase == TouchPhase.Moved) { v_cur = touch.position - v_center; if (v_old != Vector2.zero) Game.alpha += Vector2.Angle (v_old, v_cur);//<--ТУТ } else { v_cur = Vector2.zero; }
все работает, но не могу понять как узнать в какую сторону двигается палец: по часовой или против часовой, а из-за этого, в какую сторону не крути-все против.
//знает другой способ, подсобите.
И как нормально узнать угол девайса, а то
Vector3 ass=Input.accelerometer;
ass.x=0;
angle=Vector3.Angle(Vector3.up,ass);
не работает.
А всегда акселерометр возращяет десятичные доли?(.0,.2,.5 и т.д)
|
(Offline)
|
|
19.08.2012, 15:35
|
#596
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
УжЕ сам.ВСЕМ спасибо
|
(Offline)
|
|
19.08.2012, 21:36
|
#597
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
изучаю злых роботов. там все построенно на посылке сообщений с помощью SignalSender. вроде бы и удобно т.к. не надо создавать много скриптов, а один настраивать можно, чтобы при каких-то событиях он еосылал обьектам сообщения(например при взломе компа открывать двери и др) но пока разобрался что куда сообщения посылает пол дня прошло.
вот думаю как хорошо было бы, если в юнити был такой тип в который можно было записать ссылку на скрипт и метод. и конечно в инспекторе выводился бы список методов скрипта из которых можно было бы выбирать нужный. а то одну букву неправильно напишешь и ж@п@.
думаю это было бы и не сложно сделать, но создать свой инспектор для простого класса нельзя(
никому такая идея не приходила?
|
(Offline)
|
|
21.08.2012, 11:09
|
#598
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопросы от новичка
[зануда моде]
6. Кватернионы это боле сложная структоура - комплексный вектор гиперкомлексное число. О них просто надо думать как о вращении.
[/зануда моде]
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.08.2012, 16:55
|
#599
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Вопросы от новичка
Код передвижения кубиков по полу локации. Кубики двигаются только вместе. Когда нажатие всего одно ноль реакции.
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void Update()
{
Vector2 TPosition;
Vector2 TPosition2;
Ray ray = new Ray();
Ray ray2 = new Ray();
RaycastHit hit;
RaycastHit hit2;
GameObject cube;
GameObject cube2;
cube = GameObject.Find("Cube");
cube2 = GameObject.Find("Cube2");
TPosition = Input.GetTouch(0).position;
TPosition2 = Input.GetTouch(1).position;
ray = camera.ScreenPointToRay(TPosition);
ray2 = camera.ScreenPointToRay(TPosition2);
Physics.Raycast(ray, out hit);
if (hit.point != Vector3.zero){
cube.transform.position = hit.point;
}
Physics.Raycast(ray2, out hit2);
if (hit2.point != Vector3.zero){
cube2.transform.position = hit2.point;
}
}
}
Последний раз редактировалось Gector, 21.08.2012 в 22:11.
|
(Offline)
|
|
21.08.2012, 22:47
|
#600
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
я думаю из-за того, что происходит обрыв скрипта на стадии:
TPosition2 = Input.GetTouch(1).position;
, так как при одинарном тач, его не существует, перебирай .
Gector, you все блитз забыть не можешь(те), паблик переменные не прикалывают?
...
Это прикол Unity что оно не вызывает OnCollision*** если ригид кинематический???
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:40.
|