Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 15.08.2012, 22:33   #586
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Попробуй двигать лифт в FixedUpdate и еще увеличить массу объекта.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 16.08.2012, 00:26   #587
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

двигался он анимацией. достаточно было просто на лифт повесить rigid body)
кстати, не знаешь как в играх от третьего лица прицел игрока и камеры смотрит в одну точку? тут либо камера поворачивается туда куд попадает луч от прицела игрока. либо игрок поворачивается туда куда смотрит камера. но игрока поворачивать по моему не правильно. да и пучкать придется довольно длиный луч каждый кадр, что тоже не гуд.
(Offline)
 
Ответить с цитированием
Старый 16.08.2012, 00:34   #588
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 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
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 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)
Старый 16.08.2012, 14:31   #591
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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)).
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Gector (19.08.2012), HolyDel (21.08.2012), Данил (16.08.2012)
Старый 16.08.2012, 15:12   #592
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

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

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

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

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

Кстати появилась мысль для блицеров такой класс написать, где собрать часть команд с теми же именами, что и на блице
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Gector (19.08.2012), Данил (16.08.2012)
Старый 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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

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

Update вызывается каждый кадр.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (19.08.2012)
Старый 18.08.2012, 16:24   #595
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Как много морок с этим андроидом, пока управление сделаешь - повешаться можно.
Настрочил код, который крутит что нужно за пальцем:
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 и т.д)
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 19.08.2012, 15:35   #596
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

УжЕ сам.ВСЕМ спасибо
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 19.08.2012, 21:36   #597
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

изучаю злых роботов. там все построенно на посылке сообщений с помощью SignalSender. вроде бы и удобно т.к. не надо создавать много скриптов, а один настраивать можно, чтобы при каких-то событиях он еосылал обьектам сообщения(например при взломе компа открывать двери и др) но пока разобрался что куда сообщения посылает пол дня прошло.
вот думаю как хорошо было бы, если в юнити был такой тип в который можно было записать ссылку на скрипт и метод. и конечно в инспекторе выводился бы список методов скрипта из которых можно было бы выбирать нужный. а то одну букву неправильно напишешь и ж@п@.
думаю это было бы и не сложно сделать, но создать свой инспектор для простого класса нельзя(
никому такая идея не приходила?
(Offline)
 
Ответить с цитированием
Старый 21.08.2012, 11:09   #598
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопросы от новичка

[зануда моде]
6. Кватернионы это боле сложная структоура - комплексный вектор гиперкомлексное число. О них просто надо думать как о вращении.
[/зануда моде]
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (22.08.2012)
Старый 21.08.2012, 16:55   #599
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 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
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

я думаю из-за того, что происходит обрыв скрипта на стадии:
TPosition2 = Input.GetTouch(1).position;
, так как при одинарном тач, его не существует, перебирай
Input.touches
.
Gector, you все блитз забыть не можешь(те), паблик переменные не прикалывают?

...
Это прикол Unity что оно не вызывает OnCollision*** если ригид кинематический???
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (21.08.2012)
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com