forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

pax 15.08.2012 22:33

Ответ: Вопросы от новичка
 
Попробуй двигать лифт в FixedUpdate и еще увеличить массу объекта.

WISHMASTER35 16.08.2012 00:26

Ответ: Вопросы от новичка
 
двигался он анимацией. достаточно было просто на лифт повесить rigid body)
кстати, не знаешь как в играх от третьего лица прицел игрока и камеры смотрит в одну точку? тут либо камера поворачивается туда куд попадает луч от прицела игрока. либо игрок поворачивается туда куда смотрит камера. но игрока поворачивать по моему не правильно. да и пучкать придется довольно длиный луч каждый кадр, что тоже не гуд.

pie 16.08.2012 00:34

Ответ: Вопросы от новичка
 
Вот тут есть на тему поворота камеры и прицела: Перейти на Unity3D.com

Данил 16.08.2012 03:19

Ответ: Вопросы от новичка
 
Цитата:

Пример:
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, добавь в аську, я тебя немного по достаю. :)
И да, я не хочу лезть в дерби этих всех тем - наверняка, я такой не первый.

h1dd3n 16.08.2012 03:48

Ответ: Вопросы от новичка
 
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;
    }
}

"Сложности" созданы для удобства, как бы странно это не казалось.

pax 16.08.2012 14:31

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Данил (Сообщение 236388)
pax, добавь в аську, я тебя немного по достаю. :)

Эм, ты у меня в контактах.

По порядку:
1. Каждый объект сцены имеет компонент Transform, который отвечает за ориентацию объекта в пространстве.
2. Получить компонент Transform в скрипте можно следующими способами:
  • просто свойство transform
  • тоже самое this.transform
  • GetComponent<Transform>()
3. Vector3 - это набор из трех координат (x,y,z). Используется для описания положения, направления или вращения (по каждой из осей).
4. Вектора можно складывать, вычитать:
PHP код:

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)).

pax 16.08.2012 15:12

Ответ: Вопросы от новичка
 
Кстати можешь для себя написать базовый класс, унаследованный от MonoBehaviour и в нем определить методы, которые тебе надо использовать без обращения к траносформу:

PHP код:

public class MyBehaviourMonoBehavoiur
{
   public 
void TranslateLocal(float xfloat yfloat z)
   {
       
transform.Translate(x,y,zSpace.Self);
   }

   public 
void TranslateGlobal(float xfloat yfloat z)
   {
       
transform.Translate(x,y,zSpace.World);
   }


Потом использовать:

PHP код:

public class MyScriptMyBehaviour
{
   public 
void Update()
   {
      
TranslateLocal(Time.deltaTime00);
   }


Кстати появилась мысль для блицеров такой класс написать, где собрать часть команд с теми же именами, что и на блице :)

Данил 16.08.2012 15:36

Ответ: Вопросы от новичка
 
о, это хорошая идея) модуль в юнайте )
transform.Translate(x,y,z, Space.Self);
о. что за спейс.селф :)
например, подставил х=1 - афигеть, теперь у меня кубик движется!!
подставил -1 -он куда-то резко улетел :(

pax 16.08.2012 15:47

Ответ: Вопросы от новичка
 
Self - локальные координаты.
Чтобы двигать с учетом времени, надо умножать на Time.deltaTime
transform.Translate(1 * Time.deltaTime, 0, 0, Space.Self);

Update вызывается каждый кадр.

RegIon 18.08.2012 16:24

Ответ: Вопросы от новичка
 
Как много морок с этим андроидом, пока управление сделаешь - повешаться можно.
Настрочил код, который крутит что нужно за пальцем:
PHP код:

v_old v_cur;
        
        
//пальчиком по кругу
        
if (ControlMode == && 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_oldv_cur);//<--ТУТ
            
} else {
                
v_cur Vector2.zero;
            } 

все работает, но не могу понять как узнать в какую сторону двигается палец: по часовой или против часовой, а из-за этого, в какую сторону не крути-все против.
//знает другой способ, подсобите.
И как нормально узнать угол девайса, а то
Код:

Vector3 ass=Input.accelerometer;
ass.x=0;
 angle=Vector3.Angle(Vector3.up,ass);

не работает.
А всегда акселерометр возращяет десятичные доли?(.0,.2,.5 и т.д)

RegIon 19.08.2012 15:35

Ответ: Вопросы от новичка
 
УжЕ сам.ВСЕМ спасибо

WISHMASTER35 19.08.2012 21:36

Ответ: Вопросы от новичка
 
изучаю злых роботов. там все построенно на посылке сообщений с помощью SignalSender. вроде бы и удобно т.к. не надо создавать много скриптов, а один настраивать можно, чтобы при каких-то событиях он еосылал обьектам сообщения(например при взломе компа открывать двери и др) но пока разобрался что куда сообщения посылает пол дня прошло.
вот думаю как хорошо было бы, если в юнити был такой тип в который можно было записать ссылку на скрипт и метод. и конечно в инспекторе выводился бы список методов скрипта из которых можно было бы выбирать нужный. а то одну букву неправильно напишешь и ж@п@.
думаю это было бы и не сложно сделать, но создать свой инспектор для простого класса нельзя(
никому такая идея не приходила?

HolyDel 21.08.2012 11:09

Ответ: Вопросы от новичка
 
[зануда моде]
6. Кватернионы это боле сложная структоура - комплексный вектор гиперкомлексное число. О них просто надо думать как о вращении.
[/зануда моде]

Gector 21.08.2012 16:55

Ответ: Вопросы от новичка
 
Код передвижения кубиков по полу локации. Кубики двигаются только вместе. Когда нажатие всего одно ноль реакции.

Код:

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


RegIon 21.08.2012 22:47

Ответ: Вопросы от новичка
 
я думаю из-за того, что происходит обрыв скрипта на стадии:
Код:

TPosition2 = Input.GetTouch(1).position;
, так как при одинарном тач, его не существует, перебирай
Код:

Input.touches
.
Gector, you все блитз забыть не можешь(те), паблик переменные не прикалывают?

...
Это прикол Unity что оно не вызывает OnCollision*** если ригид кинематический???


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

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