forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Физика (http://forum.boolean.name/forumdisplay.php?f=168)
-   -   Проблема с физикой (http://forum.boolean.name/showthread.php?t=16256)

Nerd 31.01.2012 00:16

Проблема с физикой
 
Приделываю Rigidbody к стандартным примитивам - работает нормально.
Пытаюсь приеделать его к чилдам загруженных моделей (экспортил чрез 3dsmax, пробовал разные форматы) - они двигаются, но не работают столкновения (т.е. тела проходят сквозь колайдеры и сквозь друг друга). Масштабирование не юзал, отпарентить пробовал, resetxform пробовал.
чяднт?

Lestar 31.01.2012 02:26

Ответ: Проблема с физикой
 
Или самому добавить коллайдер или в настройках импортера поставить флаг на generate colliders,

pax 31.01.2012 07:47

Ответ: Проблема с физикой
 
Если на моделях меш коллайдеры, то надо ставить им галочку Convex (на некоторых может не сработать). Не выпуклая движущаяся геометрия не поддерживается. Если сложная геометрия, то можно попробовать составить компаунд из нескольких примитивов (добавляй пустышки в чайлды ригидбоди и добавляй им коллайдеры). Если они двигаются анимацией, то ставить галочку Is Kinematic.

Nerd 31.01.2012 17:24

Ответ: Проблема с физикой
 
okay
Код:

...
        void SetMotor(float speed)
        {
                        hingeJoint.motor.force = speed;
        }
...

Выдаёт ошибку
Цитата:

Cannot modify a value type return value of `UnityEngine.HingeJoint.motor'. Consider storing the value in a temporary variable
А тут чяднт?

pax 31.01.2012 17:33

Ответ: Проблема с физикой
 
А так:
Код:

...
        void SetMotor(float speed)
        {
                        var motor = hingeJoint.motor;
                        motor.force = speed;
                        hingeJoint.motor = motor;
        }
...


Nerd 31.01.2012 17:57

Ответ: Проблема с физикой
 
Спс. Но теперь ошибки не выдаёт, а не работает (тупо обнуляет ангулярную скорость)

pax 31.01.2012 18:02

Ответ: Проблема с физикой
 
Тут я не виноват)

Nerd 01.02.2012 22:34

Ответ: Проблема с физикой
 
Цитата:

Error building Player: IndexOutOfRangeException: Array index is out of range.
UnityEditor.HostView:OnGUI()
---
Exception: Error building Player: IndexOutOfRangeException: Array index is out of range.
UnityEditor.BuildPlayerWindow.BuildPlayerWithDefau ltSettings (Boolean askForBuildLocation, BuildOptions forceOptions) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/BuildPlayerWindow.cs:367)
UnityEditor.BuildPlayerWindow.GUIBuildButtons (Boolean enableBuildButton, Boolean enableBuildAndRunButton, Boolean canInstallInBuildFolder) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/BuildPlayerWindow.cs:972)
UnityEditor.BuildPlayerWindow.ShowBuildTargetSetti ngs () (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/BuildPlayerWindow.cs:953)
UnityEditor.BuildPlayerWindow.OnGUI () (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/BuildPlayerWindow.cs:726)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters)
UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/DockArea.cs:225)
UnityEditor.HostView.Invoke (System.String methodName) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/DockArea.cs:218)
UnityEditor.HostView.OnGUI () (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/DockArea.cs:119)
Получаю это при попытке скомпилить проект под андроид (под другие платформы всё ок). Что это может значить?

pax 01.02.2012 22:54

Ответ: Проблема с физикой
 
Андроид SDK установлен? Установлена ли та версия, под которую компилируешь?

Nerd 01.02.2012 23:23

Ответ: Проблема с физикой
 
Да, другой проект вроде компилился (но с глюками - mobile/diffuse сливается в кашу, по крайней мере на эмуляторе)

pax 02.02.2012 00:10

Ответ: Проблема с физикой
 
выкинь эмулятор. на нем вообще тестировать невозможно.

Lestar 02.02.2012 01:34

Ответ: Проблема с физикой
 
Покажи скрины развертки Player Setting, а именно свиток Other Setting и Android SDK Manager с открытыми свитками того, что установлено.

Nerd 02.02.2012 21:25

Ответ: Проблема с физикой
 
Разобрался.
-
...
Пока не имею девайса с ведроидом, просьба проверить этот код:
Код:

using UnityEngine;
using System.Collections;

public class mobile_clicker : MonoBehaviour {

public GUITexture[] butts;

void OnUpdate()
{
    foreach(Touch t in Input.touches)
    {
      if(t.phase == TouchPhase.Began)
      {
        foreach(GUITexture b in butts)
        {
                Rect r = b.GetScreenRect();
                if( QuadCollide(r.x,r.y,r.width,r.height,t.position.x,t.position.y) )
                {
                  b.SendMessage("OnMouseDown", null, SendMessageOptions.DontRequireReceiver);
                }
        }
      }
    }
}

bool QuadCollide(float x,float y,float w,float h,float ix,float iy)
{
        if(ix>=x)
        {
                if(iy>=y)
                {
                        if(ix<=(x+w))
                        {
                                if(iy<=(y+h))
                                {
                                        return true;
                                }                               
                        }
                }
        }
return false;
}
       
}

Оно должно имитировать OnMouseDown для GUITexture из указанного массива.

Lestar 03.02.2012 01:36

Ответ: Проблема с физикой
 
Если не нужен мультитач, то простейшее решение http://www.unifycommunity.com/wiki/i...le=OnMouseDown

Nerd 03.02.2012 12:32

Ответ: Проблема с физикой
 
Цитата:

Сообщение от Lestar (Сообщение 218507)
Если не нужен мультитач, то простейшее решение http://www.unifycommunity.com/wiki/i...le=OnMouseDown

Это я видел, мне надо было именно для GUITexture.

pax 03.02.2012 13:58

Ответ: Проблема с физикой
 
Ну тут проще не свою функцию писать, а готовую использовать http://unity3d.com/support/documenta....Contains.html
Пробовать некогда.

Если надо обрабатывать только один тач, то достаточно http://unity3d.com/support/documenta...uttonDown.html ну и http://unity3d.com/support/documenta...ePosition.html
оно на мобильниках работает.

Lestar 03.02.2012 14:15

Ответ: Проблема с физикой
 
Цитата:

Сообщение от Nerd96 (Сообщение 218513)
Это я видел, мне надо было именно для GUITexture.

OnMouseDown is called when the user has pressed the mouse button while over the GUIElement or Collider.

Nerd 03.02.2012 14:22

Ответ: Проблема с физикой
 
Цитата:

Сообщение от Lestar (Сообщение 218524)
OnMouseDown is called when the user has pressed the mouse button while over the GUIElement or Collider.

На мобилках-то не работает. Приведённый мной код вроде должен работать даже с мультитачем. Тупо нет возможности проверить.

Lestar 03.02.2012 17:41

Ответ: Проблема с физикой
 
Я для себя давал ссылку на класс, позволяющий работать работать OnMouseDown на девайсах? Он тоже будет работать с мультитачем, но я бы для этих целей его не юзал.

Nerd 03.02.2012 17:53

Ответ: Проблема с физикой
 
Не, ну
Цитата:

Сообщение от Lestar (Сообщение 218543)
Я для себя давал ссылку на класс, позволяющий работать работать OnMouseDown на девайсах?

Цитата:

Это я видел, мне надо было именно для GUITexture.
Цитата:

This is only for 3D objects with colliders (e.g. this is used for the 3D menus in HyperBowl), not for GUIText and GUITexture.

Nerd 03.02.2012 22:51

Ответ: Проблема с физикой
 
И ещё вопrос. FixedJoint почему-то работает как пружина, а не закрепляет два объекта (на врапере физикса под блиц pxJointCreateFixed работало как надо). Можно ли настроить джоинт, чтоб он именно закреплял с возможностью отламаться?

pax 04.02.2012 15:09

Ответ: Проблема с физикой
 
ну чтобы отломилась - нужно задать два параметра Break xxx

Nerd 06.02.2012 14:50

Ответ: Проблема с физикой
 
Так, проверил свою кликалку на настоящем девайсе - не работает. Готовых решений не нашёл(
Где в вышеприведённом коде может быть ошибка?

pax 06.02.2012 14:54

Ответ: Проблема с физикой
 
OnUpdate() замени на Update()

Nerd 06.02.2012 15:34

Ответ: Проблема с физикой
 
Код:


using UnityEngine;
using System.Collections;

public class mobile_clicker : MonoBehaviour {

public GameObject[] butts;

void Update()
{
    foreach(Touch t in Input.touches)
    {
        foreach(GameObject b in butts)
        {
                Rect r = b.guiTexture.GetScreenRect();
                if( QuadCollide(r.x,r.y,r.width,r.height,t.position.x,t.position.y) )
                {
                                      if(t.phase == TouchPhase.Began)
                                      {
                                          b.gameObject.SendMessage("OnMouseDown", null, SendMessageOptions.DontRequireReceiver);
                                        }
                                else if(t.phase == TouchPhase.Ended)
                                {
                                        b.gameObject.SendMessage("OnMouseUp", null, SendMessageOptions.DontRequireReceiver);
                                }
        }
      }
    }
}

bool QuadCollide(float x,float y,float w,float h,float ix,float iy)
{
        if(ix>=x)
        {
                if(iy>=y)
                {
                        if(ix<=(x+w))
                        {
                                if(iy<=(y+h))
                                {
                                        return true;
                                }                               
                        }
                }
        }
return false;
}
       
}

Всё исправил, теперь работает. Даже OnMouseUp!
А нельзя ли получить лист всех GUITexture на сцене?
И ещё: как передавать данные между сценами?

pax 06.02.2012 16:02

Ответ: Проблема с физикой
 
1. Найти все GUITexture
2. Статические переменные, объекты или так

Lestar 06.02.2012 16:42

Ответ: Проблема с физикой
 
2. DontDestroyOnLoad.

Nerd 11.02.2012 13:17

Ответ: Проблема с физикой
 
На андроиде изменение pixelinset почему-то не работает (всмысле, вообще убирает вникуда). Это нормально?

pax 11.02.2012 13:54

Ответ: Проблема с физикой
 
А ты уверен что правильно его назначаешь?

Nerd 11.02.2012 14:49

Ответ: Проблема с физикой
 
Ну, раз на других платформах работает...


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

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