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)

Andvrok 15.08.2010 01:35

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

Сообщение от Den (Сообщение 158437)
Как ты построилкривую бизье в гисмозе, да ещё заставил объект по это кривой передвигатся?
http://unity3d.ru/distribution/download/file.php?id=878

В FPS примере используется такая вещь, посмотри там, может что найдешь.

pax 15.08.2010 10:07

Ответ: Фак по Юнити.
 
2Den Ответ скрыт во втором посте вот этого топика (ссылка) ;)

den 15.08.2010 23:23

Ответ: Фак по Юнити.
 
Всё время писал на JS.
Сейчас решил на C# попробывать.
Вот код на JS
PHP код:

GUI.Label(Rect(10,10,50,100), life);
//где life это int переменная 

а как это сделать на C#
я тока сделал вот что
PHP код:

GUI.Label(new Rect(10,10,50,100), life);
//но он ругается на 2 переменую, типа она должна быть string 

как быть???:dontknow:

pax 15.08.2010 23:40

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

GUI.Label(new Rect(10,10,50,100), life.ToString()); 


den 16.08.2010 16:59

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

using UnityEngine;
using System.Collections;

public class 
mainMenu MonoBehaviour {
public 
Rect  windowRect1= new Rect (202012050);
public 
Rect  windowRect2= new Rect (202012050);
private 
string b1;
private 
string b2;
private 
bool a=false;
private 
bool menu=false;
public 
float g=5.0f;
void OnGUI()
    {
         if((
menu &&  (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 GUI.Window (0windowRect1MyWindow1"Main Menu");
            if(
awindowRect2 GUI.Window (0windowRect2MyWindow2"Setting");}
        if(
Application.loadedLevel==0)
        {
            
b1="Play";
            
b2="Exit";
        }
        if(
Application.loadedLevel==1)
        {
            
b1="Continue";
            
b2="Main Menu";
            if(
Input.GetAxis("Esc")!=0)
            {            
                
menu=true;
                
Screen.lockCursor false;
            }
            if(
menuTime.timeScale=0.1f//  СТРОЧКА!!!!
            
else Time.timeScale=1.0f;
        }
    }
    
    
void MyWindow1 (int windowID
    {
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button(b1))
        {
            if(
Application.loadedLevel==0Application.LoadLevel(1);
            if(
Application.loadedLevel==1)
            {
                
Screen.lockCursor true;
                
menu=false;
            }
        }
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button("Setting")) a=!a;
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button(b2))  // СТРОЧКА!!!
        
{
            if(
Application.loadedLevel==1Application.LoadLevel(0);
            if(
Application.loadedLevel==0Application.Quit();
        }
        
GUILayout.EndHorizontal();
        
//GUI.DragWindow();
    
}
    
void MyWindow2 (int windowID
    {
        
GUILayout.BeginHorizontal();
        
GUILayout.Label("Graphics");
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        
g=GUILayout.HorizontalSlider(g,0,6);
        if(
g>=&& g<1)
            
QualitySettings.currentLevel QualityLevel.Fastest;
        if(
g>=&& g<2)
            
QualitySettings.currentLevel QualityLevel.Fast;
        if(
g>=&& g<3)
            
QualitySettings.currentLevel QualityLevel.Simple;
        if(
g>=&& g<4)
            
QualitySettings.currentLevel QualityLevel.Good;
        if(
g>=&& g<5)
            
QualitySettings.currentLevel QualityLevel.Beautiful;
        if(
g>=&& g<6)
            
QualitySettings.currentLevel QualityLevel.Fantastic;
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button("Ok")) a=!a;
        
GUILayout.EndHorizontal();
        
//GUI.DragWindow();
    
}


Почему если вместь if(menu) Time.timeScale=0.1f; поставить if(menu) Time.timeScale=0.0f;
то компилятор ругается
Цитата:

ArgumentException: Getting control 0's position in a group with only 0 controls when doing repaint
Aborting

UnityEngine.GUILayoutGroup.GetNext ()
UnityEngine.GUILayoutUtility.DoGetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayoutUtility.GetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.DoButton (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.Button (System.String text, UnityEngine.GUILayoutOption[] options) [0x00000]
mainMenu.MyWindow1 (Int32 windowID) (at Assets\mainMenu.cs:52)
UnityEngine.GUI+_Window.Do ()
UnityEngine.GUI.EndWindows (UnityEngine.IDList idlist)
UnityEngine.GUIUtility.EndGUI (Int32 doLayout, Int32 doWindows, UnityEngine.IDList idlist)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.GameView:OnGUI()
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
System.Reflection.MethodBase:Invoke(Object, Object[])
UnityEditor.HostView:Invoke(String)
UnityEditor.MaximizedHostView:OnGUI()
но не сразу а после нажатия кнопки "Continue" ??
Тыкает меня на if(GUILayout.Button(b2))
Почему?

pax 16.08.2010 17:07

Ответ: Фак по Юнити.
 
GUI - это такая хитрая штука в юнити, что за кадр может отрисовываться до пяти раз. Следовательно и код отрисовки тоже столько же раз может повториться. Ошибка эта проявляется тогда, когда у GUI не получается отрисовать один из проходов помоему. Но тут проблема скорее всего не в этом, а в том, что ты читаешь Input в методе OnGUI, а он предназначен для метода Update.

PS: кстати зачем нужна строчка Screen.lockCursor = false;? Не достаточно ли просто его скрыть?

den 16.08.2010 17:27

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

den 16.08.2010 18:25

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

using UnityEngine
using System.Collections

public class 
MainMenuMonoBehaviour 
public 
Rect  windowRect1= new Rect (202012050); 
public 
Rect  windowRect2= new Rect (202012050); 
private 
string b1
private 
string b2
public 
bool menu=false;
public 
Camera cam;
public 
Transform FPS;
private 
bool a=false
public 
float g=5.0f
void OnGUI() 
    { 
             if((
menu &&  (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 GUI.Window (0windowRect1MyWindow1"Main Menu"); 
            if(
awindowRect2 GUI.Window (0windowRect2MyWindow2"Setting");}
            if(
menu)
            {
                
Time.timeScale=0.1f// <---- Вот здеся)
            
}
            else 
Time.timeScale=1.0f;
    } 
     
    
void MyWindow1 (int windowID)  
    { 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button(b1)) 
        { 
            if(
Application.loadedLevel==0Application.LoadLevel(1); 
            if(
Application.loadedLevel==1
            { 
                
Screen.lockCursor true
                
menu=false
            } 
        } 
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button("Setting")) a=!a
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button(b2))
        { 
            if(
Application.loadedLevel==1Application.LoadLevel(0); 
            if(
Application.loadedLevel==0Application.Quit(); 
        } 
        
GUILayout.EndHorizontal(); 
        
//GUI.DragWindow(); 
    

    
void MyWindow2 (int windowID)  
    { 
        
GUILayout.BeginHorizontal(); 
        
GUILayout.Label("Graphics"); 
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        
g=GUILayout.HorizontalSlider(g,0,6); 
        if(
g>=&& g<1
            
QualitySettings.currentLevel QualityLevel.Fastest
        if(
g>=&& g<2
            
QualitySettings.currentLevel QualityLevel.Fast
        if(
g>=&& g<3
            
QualitySettings.currentLevel QualityLevel.Simple
        if(
g>=&& g<4
            
QualitySettings.currentLevel QualityLevel.Good
        if(
g>=&& g<5
            
QualitySettings.currentLevel QualityLevel.Beautiful
        if(
g>=&& g<6
            
QualitySettings.currentLevel QualityLevel.Fantastic
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button("Ok")) a=!a
        
GUILayout.EndHorizontal(); 
        
//GUI.DragWindow(); 
    

    
    
void Update()
    {
        if(
Application.loadedLevel==0
        { 
            
b1="Play"
            
b2="Exit"
            
Screen.lockCursor false
        } 
        if(
Application.loadedLevel==1
        { 
            
cam.gameObject.GetComponent<MouseLook>().enabled=!menu;
            
FPS.gameObject.GetComponent<MouseLook>().enabled=!menu;
gameObject.GetComponent<Strelok>().enabled=!menu;
            
b1="Continue"
            
b2="Main Menu"
            if(
Input.GetAxis("Esc")!=0
            {             
                
menu=true
                
Screen.lockCursor false
            } 
        } 
    }


вот новый код.
ошибок некаких не выдаёт.
Но как видно он ставит не на паузу (Time.timeScale=0.1f; ).
А мне надо на паузу (Time.timeScale=0.0f; )
но когда я так изменю строку , игра не снимается с паузы (ошибок никаких не выдаёт).
Помогите!:''((
---------------
---------------
---------------
PHP код:

using UnityEngine;
using System.Collections;

public class 
Apteka MonoBehaviour {
    public  
int  prib=10;
    public 
Collider igrok;
    
void OnCollisionEnter (Collision coll)
    {
        if(
igrok == coll.collider)
            global.
live+=prib
    }


это скрипт аптечки.
igrok - это FPS плэйер
global.live - это его жизни
Но почему скрипт срабатывает только если апчтечка упадёт игроку на голову?

pax 17.08.2010 00:09

Ответ: Фак по Юнити.
 
Я бы попробовал так:
PHP код:

if(GUILayout.Button(b1))  //или b2
        
{  
             
Time.timeScale=1.0f;
        }

...

            if(
Input.GetButtonDown("Esc"))  
            {              
                
menu=true;  
                
Screen.lockCursor false;  
                
Time.timeScale=0.0f;
            } 

А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger

den 17.08.2010 01:01

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

Я бы попробовал так:
я так тоже пробывал не помогает: главное курсор после нажатия кнопки Esc становится в центр, но не исчезает!
Похуду при timeScale=0 некоторые функции просто неработают.
Но я сделал Time.timeScale=0.001f; ,впринцепе не заметно что игра не на паузе, а просто замедлилась в 1000 раз:-D
------------
Цитата:

А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...

pax 17.08.2010 11:16

Ответ: Фак по Юнити.
 
А ты попробуй убрать все Screen.lockCursor = true;

Цитата:

Сообщение от Den (Сообщение 158689)
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...

Тогда OnCollisionEnter должна быть у игрока, и при столкновении с чем-то он должен проверять, с чем столкнулся. И если это аптечка - то добавлять себе жизней и удалять аптечку. Просто, по моему, OnCollisionEnter вызывается у объектов, которые двигались, а не у тех, которые были неподвижны до столкновения.

den 17.08.2010 18:08

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

bool n=false;
        
GameObject[] vrags GameObject.FindGameObjectsWithTag("vrag"); 
        for(
GameObject vr in vrags)
        {
            if(
Vector3.Distance(vr.transform,transform)<=10)
                
n=true;
        } 

почему не работает?
на JS всё работает, решил на C# переписать нефига!

h1dd3n 17.08.2010 18:42

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

den 17.08.2010 18:55

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

foreach?
так чтоли?
PHP код:

bool n=false;
        
GameObject[] vrags GameObject.FindGameObjectsWithTag("vrag"); 
        for(
GameObject vr foreach vrags)
        {
            if(
Vector3.Distance(vr.transform,transform)<=10)
                
n=true;
        } 

можно поконкретнее...

SBJoker 17.08.2010 18:58

Ответ: Фак по Юнити.
 
проффи....ыыы...
Код:

foreach([var] in [array]){

}

З.Ы. тема почищена


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

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