forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

Lestar 13.07.2011 02:19

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Taugeshtu (Сообщение 195262)
Бред. Есть плоскость - статичный коллайдер. Есть 2 ящика на ней. Один подтащили к другому, второй (на котором такой скрипт) начал падать, пока есть пересечение с другим, после чего снова стал коллайдером и куда-то вылетел из плоскости. Или застрял в ней.

Я не вижу в вопросе,чтобы на тела действовала сила тяжести.isTrigger = true для передвигаемого тела,а не для тел с ним взаимодействующих.

SaM_ 14.07.2011 22:59

Ответ: Фак по Юнити.
 
Как сделать, что бы если предмет НЕ сталкивается с определенным объектом проигрывалась анимация?

Lestar 14.07.2011 23:36

Ответ: Фак по Юнити.
 
Мало данных.Что значит не сталкивается?
Можно запустить на постоянное проигрывание и если столкнулся,тогда выключать.
Можно при размыкании коллайдеров
PHP код:

void OnCollisionExit(Collision collision) {
animation.Play();


Можно еще на кофейной гуще погадать.

h1dd3n 15.07.2011 00:13

Ответ: Фак по Юнити.
 
Сделать чтобы проигрывалась анимация когда сталкивается а потом добавить !

SaM_ 15.07.2011 20:42

Ответ: Фак по Юнити.
 
Народ, что в этом скрипте не правильно? Я хочу что, бы когда объект касался пола, то была возможность запускать анимацию ходьбы и идла, а когда он в полёте, то играла анимация прыжка.
В данном случае никакая анимация не запускается, а персонаж находится в начальной позе.

PHP код:

function OnColliderEnterhit Collider)  
{

        if(
hit.gameObject.tag == "floor")
        {


if (
Input.GetKey("a"))
{
animation.Play("walk");
}

else if (
Input.GetKey("d"))
{
animation.Play("walk");
}

else {
animation.Play("idle");
}
}


else
{
animation.Play("jump");
}



Lestar 15.07.2011 21:08

Ответ: Фак по Юнити.
 
Я бы прикрепил к персонажу думик и лучом мерял расстояние от думика до террайна.Если больше чего то там,считал бы это прыжком.

P.S. В твоем случае
OnColliderEnter ,нет такого метода.Есть OnCollisionEnter ,который будет работать только если на одном из сталкивающихся обьектов есть регидбоди.Выход коллайдера проверяется OnCollisionExit.

SaM_ 15.07.2011 21:25

Ответ: Фак по Юнити.
 
PHP код:

function OnCollisionEnter(collision Collision)
{

        if(
collision.gameObject.tag == "floor")
        {

... 

Изменил начальную часть скрипта. Добавил ригид для пола. Но результат прежний. :(

cahekp 15.07.2011 21:42

Ответ: Фак по Юнити.
 
to SaM_:
Смотри, тут вот в чем дело. OnCollisionEnter вызывается только ОДИН раз, как только коллайдеры впервые соприкоснулись. Если успел в этот момент нажать соответствующую кнопку - начнет проигрываться анимация.

Тебе надо использовать OnCollisionStay. Он вызывается КАЖДЫЙ КАДР, когда один коллайдер (текущий) соприкасается с другим.

SaM_ 15.07.2011 21:47

Ответ: Фак по Юнити.
 
cahekp, так тоже не выходит. Не знаю в чем проблема, но игрок вообще не реагирует на скрипт, хотя если убрать всё что связанно с collision, то анимация играет при нажатии клавиш.

Lestar 15.07.2011 22:31

Ответ: Фак по Юнити.
 
Проверь через Debug.Log срабатывание
PHP код:

if(collision.gameObject.tag == "floor"

И проверь floor на правильность написания.Регистр букв имеет значение.

P.S.Добавлять регидбоди к террайну это очень плохая идея.

is.SarCasm 16.07.2011 12:22

Ответ: Фак по Юнити.
 
Цитата:

f (Input.GetKeyDown(KeyCode.T)){Time.timeScale = 1 - Time.timeScale;}
жму 1 раз - всё остановилось
жму 2 раз - всё звисло, фпс: NaN

Lestar 16.07.2011 15:24

Ответ: Фак по Юнити.
 
PHP код:

void Update() 
    {
        
Debug.Log(Time.timeScale);
        if (
Input.GetKeyDown(KeyCode.T))
        {
Time.timeScale Time.timeScale;} 
    } 

Все работает,Time.timeScale отображает корректно.

SaM_ 16.07.2011 17:07

Ответ: Фак по Юнити.
 
Народ, вот смотрите, решил сделать чистый проект с элементарными объектами, что бы проверить работоспособность OnCollisionEnter.

Создал Cube, Plate и один скрипт. К Cube применил Platform Input Controller, RigidBody и единственный скрипт. К Plate назначил тег "floor".
Вот скрипт к Cube:
PHP код:

function OnCollisionEnter (collision Collision


        if(
collision.gameObject.tag == "floor"
        {
            
Destroy (gameObject); 
            }


При запуске проекта, куб под действием гравитации падает на Plate, но не удаляется, как должно быть.
Что я делаю не так?:SOS:

Lestar 16.07.2011 17:38

Ответ: Фак по Юнити.
 
Вложений: 1
Прикрепил сцену в которой данный скрипт работает.

SaM_ 16.07.2011 18:19

Ответ: Фак по Юнити.
 
Lestar, благодарю. Если не применять к кубу Platform Input Controller или Character Motor, или что-то такое, то всё работает.

Lestar 16.07.2011 18:35

Ответ: Фак по Юнити.
 
Platform Input Controller использует компонент Character Motor.
В Character Motor есть метод работающий с коллайдером.Он и может "конфликтовать".

is.SarCasm 17.07.2011 15:02

Ответ: Фак по Юнити.
 
Как поднимать объекты с ригидбоди? Ну типо как обычно в играх, навел мышкой на объект, нажал клавишу и если на нём ригидбоди то его можно передвигать курсором.

Nuprahtor 17.07.2011 15:13

Ответ: Фак по Юнити.
 
Есть скрипт в Standart Assets
https://www.assembla.com/code/gpw_pr...dbody.js?rev=1

SaM_ 17.07.2011 15:41

Ответ: Фак по Юнити.
 
^Ух, очень полезная штука.

Как сделать плавный переход между анимациями?

Lestar 17.07.2011 15:56

Ответ: Фак по Юнити.
 
Animation.Blend

is.SarCasm 17.07.2011 16:46

Ответ: Фак по Юнити.
 
Как сделать копию класса. Ну то есть у меня есть класс. Я пишу:
Цитата:

MyClass someItem = new MyClass( a lot of options );
И мне нужно создать ещё один на основе someItem, если написать "=", то получается ссылка
Цитата:

MyClass newItem;
newItem = someItem// Reference

den 17.07.2011 16:59

Ответ: Фак по Юнити.
 
newItem = someitems.MemberwiseClone();
или
newItem = someitems.Clone();
вродебы...
непомню)

SaM_ 17.07.2011 17:05

Ответ: Фак по Юнити.
 
Вопрос решен.

is.SarCasm 17.07.2011 17:38

Ответ: Фак по Юнити.
 
Цитата:

newItem = someitems.MemberwiseClone();
или
newItem = someitems.Clone();
Ничего этого в списке нету

is.SarCasm 17.07.2011 17:45

Ответ: Фак по Юнити.
 
Эта ф-я копирует только Юнити объекты

Lestar 17.07.2011 17:58

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от is.SarCasm (Сообщение 195809)
Как сделать копию класса.

PHP код:

class MyClass
{
   
int a,b;
}
void Copy(MyClass obj)
{
   
a=obj.a;
   
b=obj.b;
}
MyClass obj1=new MyClass (бла,бла);
MyClass obj1=new MyClass (бла,бла);

obj1=Copy(obj2); // делаем обьект obj1 копией обьекта obj2 


SaM_ 17.07.2011 18:18

Ответ: Фак по Юнити.
 
Как можно вывести значение переменной при помощи jawa на страницу сайта?

den 17.07.2011 18:38

Ответ: Фак по Юнити.
 
Не jawa а java БЛДЖАД!
Пошли запрос типа site.ru/ololo.php?var=100500
А в php скрипте уже добовляй на страничку

SaM_ 17.07.2011 19:56

Ответ: Фак по Юнити.
 
Ну дык как запрос отправить? oO

Lestar 17.07.2011 23:03

Ответ: Фак по Юнити.
 
Принцип- http://blogs.unity3d.ru/2009/09/%D1%...-%D1%81%D0%B0/.

SaM_ 17.07.2011 23:26

Ответ: Фак по Юнити.
 
Благодарю. То, что нужно, даже пример есть. :4to:

SaM_ 19.07.2011 02:25

Ответ: Фак по Юнити.
 
Народ, где нибудь есть пример сохранения\загрузки?
Или просто объясните как пользоваться PlayerPrefs.

Lestar 19.07.2011 02:54

Ответ: Фак по Юнити.
 
Например сохранение уровня
PHP код:

PlayerPrefs.SetInt("Lvl"5); 

Чтение сохраненных данных
PHP код:

int _start_Level=PlayerPrefs.GetInt("Lvl"); 


SaM_ 20.07.2011 20:02

Ответ: Фак по Юнити.
 
При создании hud'a столкнулся с такой проблемой. Есть показатель очков и рамка в которой он должен быть. Но рамка находится на один уровень выше, чем gui с очками, поэтому заслоняет их. Как исправить?

Taugeshtu 20.07.2011 20:04

Ответ: Фак по Юнити.
 
Цитата:

Как исправить?
Если не ошибаюсь - z-координата у Transform.

Lestar 20.07.2011 20:05

Ответ: Фак по Юнити.
 
Использовать GUI.depth .

SaM_ 20.07.2011 21:21

Ответ: Фак по Юнити.
 
Lestar, спасибо.

А как тексту присвоить свой шрифт?
Вот есть такой скрипт, как обозначить font, что бы текст его принял?
PHP код:

var color Color Color(0.20.30.4);
         

    var 
myFont : ???;


    static var 
guiDepth int 1;
    function 
OnGUI() {
    
GUI.depth guiDepth;
        

     ??? = 
myFont;


    
GUI.color color;
    
guiDepth 1;
            
Hud1.guiDepth 0;
        (
GUI.Label(Rect(100,485,300,300), "" ScoreSystem.myScore)) ;
      
        } 


Lestar 20.07.2011 23:07

Ответ: Фак по Юнити.
 
Asssets->Creata->GUI Skin

Настроить скин.

В коде:
PHP код:

var skin1 GUISkin;

function 
OnGUI()
{
 
GUI.skin skin1;
 
Бла бла


В инспекторе указать скин.
Или работать для каждого конкретного текста со стилями.
PHP код:

var style1 GUIStyle;
function 
OnGUI()
{
GUI.Label(Rect(100,485,300,300), "" ScoreSystem.myScore,style1) ;


Стиль тоже настроить.

SaM_ 21.07.2011 01:53

Ответ: Фак по Юнити.
 
Благодарю, воспользовался вторым способом.

SaM_ 30.07.2011 17:00

Ответ: Фак по Юнити.
 
Как сделать, что бы при столкновении двух объектов один удалялся, а на его месте появлялся другой?

Lestar 30.07.2011 18:29

Ответ: Фак по Юнити.
 
Повесить на обьект который нужно подменить
PHP код:

using UnityEngine;
using System.Collections;

public class 
ObjFirst ObjTwo
{

    
void OnCollisionEnter()
    {
       
Change_Obj(gameObject);
    }


Скрипт повесить куда нибудь
PHP код:

using UnityEngine;
using System.Collections;

public class 
ObjTwo MonoBehaviour {

    public 
GameObject _new_Obj;

 public 
void Change_Obj(GameObject _obj)
    {
        
Vector3 _position _obj.transform.position;
        
Quaternion _rotation _obj.transform.rotation;
        
Destroy(_obj);
        
Instantiate(_new_Obj_position_rotation);
    }


На один из сталкивающихся обьектов добавить регидбоди.

SaM_ 31.07.2011 13:53

Ответ: Фак по Юнити.
 
Вот у меня есть изображения заполненной полосы здоровья и пустой.
Как сделать, что бы заполненная полоса, постепенно сокращалась, в зависимости от очков здоровья?
Сама система здоровья уже имеется, но выводится на экран в виде чисел, максимальное значение 20, минимальное -1.

Lestar 31.07.2011 15:14

Ответ: Фак по Юнити.
 
PHP код:

float _live;// Реалтайм жизнь героя

void OnGUI()
{
GUI.DrawTexture (Rect (1040,_live*100/2030),_hp_Texture);//100 максимальная длина полоски здоровья в пикселях


P.S.Это логика,с -1 думаю сами додумаете(не представляю себе как это величина здоровья -1,очень сильно умер?)

SaM_ 31.07.2011 16:52

Ответ: Фак по Юнити.
 
Цитата:

не представляю себе как это величина здоровья -1,очень сильно умер?
Просто если здоровье 0, то персонаж еще жив, а если -1, то мёртв. Можно на 1 цифру перенести, сути не меняет.

SaM_ 31.07.2011 18:00

Ответ: Фак по Юнити.
 
Цитата:

float _live;// Реалтайм жизнь героя

void OnGUI()
{
GUI.DrawTexture (Rect (10, 40,_live*100/20, 30),_hp_Texture);//100 максимальная длина полоски здоровья в пикселях
}
Попробовал поиграться с этими величинами, но они вроде только растягивают текстуру, а не обрезают, как надо.

Lestar 31.07.2011 18:16

Ответ: Фак по Юнити.
 
Если нужно обрезать,вложите свою полоску жизни в
PHP код:

GUI.BeginGroup();
GUI.EndGroup (); 

И оперируйте размером самого блока.

SaM_ 31.07.2011 18:19

Ответ: Фак по Юнити.
 
Разобрался.
Плюс нашел вот такой скрипт:
PHP код:

/* Using multiple Groups to clip the displayed Contents */

var bgImage Texture2D// background image that is 256 x 32
var fgImage Texture2D// foreground image that is 256 x 32
var playerEnergy 1.0// a float between 0.0 and 1.0

function OnGUI () {
    
// Create one Group to contain both images
    // Adjust the first 2 coordinates to place it somewhere else on-screen
    
GUI.BeginGroup (Rect (0,0,256,32));

    
// Draw the background image
    
GUI.Box (Rect (0,0,256,32), bgImage);

    
// Create a second Group which will be clipped
    // We want to clip the image and not scale it, which is why we need the second Group
    
GUI.BeginGroup (Rect (0,0,playerEnergy 25632));

    
// Draw the foreground image
    
GUI.Box (Rect (0,0,256,32), fgImage);

    
// End both Groups
    
GUI.EndGroup ();
    
GUI.EndGroup ();



SaM_ 31.07.2011 20:17

Ответ: Фак по Юнити.
 
Мне надо, что бы когда персонаж ловил бонус, то этот бонус удалялся, а на его месте образовывалась Gui текстура, которая после должна переместится в заданную точку на экране.
Собственно, как сделать, что бы координаты той самой текстуры соответствовали координатам бонуса, перед уничтожением. И как заставить gui перемещаться в заданную точку?

Lestar 31.07.2011 22:04

Ответ: Фак по Юнити.
 
1.Конвертируем позицию обьекта
PHP код:

screenPos =  Camera.main.WorldToViewportPoint(_obj.position); 

2.Выводим что нужно на экране,используя
PHP код:

screenPos.x
screenPos
.

Помним,что отсчет ведется от нижнего левого угла.

SaM_ 02.08.2011 23:08

Ответ: Фак по Юнити.
 
Я хочу, что бы при нажатии mouse1, в месте нынешнего расположения курсора спавнилось несколько префабов:

PHP код:

var bednaPrefab Transform;


function 
Update () {

var 
mousex Input.mousePosition.x;
var 
mousey Input.mousePosition.y;
var 
ray camera.main.ScreenPointToRay (Vector3(mousex,mousey,10));


if ( 
Input.GetMouseButtonDown(0) ){
var 
crate Instantiate(bednaPrefabray.originQuaternion.identity);
}



Что тут не так??? Ибо при нажатии mouse1 префаб спавнится перед носом самой камеры.

Lestar 03.08.2011 00:07

Ответ: Фак по Юнити.
 
Ray.origin дает позишен откуда выпущен луч,а выпущен он из камеры.

PHP код:

var bednaPrefab Transform;
var 
hit RaycastHit;

function 
Update () {

if ( 
Input.GetMouseButtonDown(0) )
{
 var 
ray camera.main.ScreenPointToRay (Vector3(Input.mousePosition));
if (
Physics.Raycast(rayhitMathf.Infinity100))
 {
  var 
crate Instantiate(bednaPrefab,(Vector3(hit.point.x,hit.point.y,10)), Quaternion.identity);
 }
}




SaM_ 03.08.2011 14:06

Ответ: Фак по Юнити.
 
Как сделать, что бы материал плавно становился прозрачным?

Lestar 03.08.2011 15:04

Ответ: Фак по Юнити.
 
PHP код:

Mesh mesh meshRenderer.mesh;
Color[] colors mesh.colors;

for (
int i=0;i<colors.Length;i++) 
{
  
Color _color colors[i];
  
_color.1.0f;  //Color.a это и есть наш альфа канал.Оперируем значением этой переменной
  
colors[i] = _color;
}
mesh.colors colors


SaM_ 03.08.2011 17:15

Ответ: Фак по Юнити.
 
Lestar, это C#?

Lestar 03.08.2011 17:21

Ответ: Фак по Юнити.
 
Это js
PHP код:

var mesh MeshmeshRenderer.mesh;
var 
colors Color[] = mesh.colors;

for (var 
i=0;i<colors.Length;i++) 
{
  var 
_color Color colors[i];
  
_color.1.0;  //Color.a это и есть наш альфа канал.Оперируем значением этой переменной
  
colors[i] = _color;
}
mesh.colors colors


SaM_ 03.08.2011 18:06

Ответ: Фак по Юнити.
 
Каким образом можно отдалять или приближать объект используя колесико на мышке??? :3

Lestar 03.08.2011 22:16

Ответ: Фак по Юнити.
 
Определяем дельту при скроллинге
PHP код:

function OnGUI()
{
  
_event Event Event.current;

  if (
_event.type == EventType.ScrollWheel)
        {
            
Debug.Log(_event.delta);//_event.delta это и есть дельта,которую можно использовать  для изменения позишен обьекта
        
}


Пример использования _event.delta
PHP код:

if (_event.type == EventType.ScrollWheel)
        {
           
transform.position=Vector3((transform.position.x+_event.delta.y,transform.position.y,transform.position.z);
        } 


SaM_ 04.08.2011 13:59

Ответ: Фак по Юнити.
 
Lestar, не очень понял суть твоих примеров.
В моём случае решил сделать так:

PHP код:

if(Input.GetAxis("Mouse ScrollWheel") > 0)
    {
    
distance += 0.1;
    }
                        
if(
Input.GetAxis("Mouse ScrollWheel") < 0)
    {
     
distance -= 0.1;
    } 

var distance отвечает за z положение объекта.

Lestar 04.08.2011 15:00

Ответ: Фак по Юнити.
 
PHP код:

if (_event.type == EventType.ScrollWheel)
        {
           
transform.position=Vector3(transform.position.x,transform.position.y,(transform.position.z+_event.delta.y*0.03));
        } 


SaM_ 06.08.2011 00:12

Ответ: Фак по Юнити.
 
Как сделать свой collision объект?

Lestar 06.08.2011 00:49

Ответ: Фак по Юнити.
 
Добавить к коллайдеру non-kinematic регидбоди.

SaM_ 06.08.2011 01:44

Ответ: Фак по Юнити.
 
А если мне надо что бы объект был динамическим?

Lestar 06.08.2011 02:01

Ответ: Фак по Юнити.
 
Можно через Collider.bounds посчитать.Какая хоть задача стоит?

SaM_ 06.08.2011 02:05

Ответ: Фак по Юнити.
 
Хочу сделать реалистичную физику поведения шины, то есть её деформация с последующим восстановлением. С деформацией самого меша разобрался, теперь надо с col поиграть :3
До этого использовал col куба.


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

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