Unity 3d - Помощь в написании скриптов. - Страница 69 - Форум Игроделов
Чт, 02 Май 2024, 12:38 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум Игроделов » UNITY3D » СКРИПТИНГ » Unity 3d - Помощь в написании скриптов.
Unity 3d - Помощь в написании скриптов.
ЛевшаДата: Вс, 30 Ноя 2014, 19:05 | Сообщение # 1361
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Ну вот когдато стояла похожая задача. Это участок кода из рабочего проекта, надеюсь поможет.

Код

#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR     
     if (Input.GetTouch(0).phase == TouchPhase.Moved && shipObj) {
           touchPos = camera.ScreenToWorldPoint(Input.GetTouch(0).position);
#else     
     if (Input.GetMouseButton(0) && shipObj) {
           touchPos = camera.ScreenToWorldPoint(Input.mousePosition);
#endif
           Vector3 newPos = new Vector3(touchPos.x, touchPos.y, shipObj.transform.position.z);
           shipObj.transform.position = Vector3.Lerp(shipObj.transform.position, newPos, Time.deltaTime * dragSpeed);     
     }

Это все в апдейте разумеется.


X.cor.R (Prologue)
 
СообщениеНу вот когдато стояла похожая задача. Это участок кода из рабочего проекта, надеюсь поможет.

Код

#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR     
     if (Input.GetTouch(0).phase == TouchPhase.Moved && shipObj) {
           touchPos = camera.ScreenToWorldPoint(Input.GetTouch(0).position);
#else     
     if (Input.GetMouseButton(0) && shipObj) {
           touchPos = camera.ScreenToWorldPoint(Input.mousePosition);
#endif
           Vector3 newPos = new Vector3(touchPos.x, touchPos.y, shipObj.transform.position.z);
           shipObj.transform.position = Vector3.Lerp(shipObj.transform.position, newPos, Time.deltaTime * dragSpeed);     
     }

Это все в апдейте разумеется.

Автор - Левша
Дата добавления - 30 Ноя 2014 в 19:05
mastersmitДата: Пн, 01 Дек 2014, 17:56 | Сообщение # 1362
Нет аватара
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Левша,
огромнейшее тебе спасибо. твой приведенный код навел меня на мысль и вуаля.. а именно эта строчка:
Код
shipObj.transform.position = Vector3.Lerp(shipObj.transform.position, newPos, Time.deltaTime * dragSpeed);

оказывается все гениально и просто smile теперь управление, хоть и с небольшим изъяном, но именно такое, какое было необходимо.
 
СообщениеЛевша,
огромнейшее тебе спасибо. твой приведенный код навел меня на мысль и вуаля.. а именно эта строчка:
Код
shipObj.transform.position = Vector3.Lerp(shipObj.transform.position, newPos, Time.deltaTime * dragSpeed);

оказывается все гениально и просто smile теперь управление, хоть и с небольшим изъяном, но именно такое, какое было необходимо.

Автор - mastersmit
Дата добавления - 01 Дек 2014 в 17:56
СахарДата: Вт, 06 Янв 2015, 14:44 | Сообщение # 1363
Нет аватара
 
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Доброго здравия.
Сегодня написал первый скрипт на unity задумка такая, при нажатий определённой кнопки в моём случай это «V» при этом в центре экрана появляется надпись «пауза».

Сама код работает 99% то есть ГГ ставится на паузу но надпись не появляется.
И ещё такой вопрос как потом удалить надпись с экрана?
 
СообщениеДоброго здравия.
Сегодня написал первый скрипт на unity задумка такая, при нажатий определённой кнопки в моём случай это «V» при этом в центре экрана появляется надпись «пауза».

Сама код работает 99% то есть ГГ ставится на паузу но надпись не появляется.
И ещё такой вопрос как потом удалить надпись с экрана?

Автор - Сахар
Дата добавления - 06 Янв 2015 в 14:44
seamanДата: Ср, 07 Янв 2015, 02:33 | Сообщение # 1364
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
1. Главное! Вам не кажется странным, что во всех примерах в мануале функции GUI вызываются внутри метода OnGUI? Может это неспроста?
2. Используйте пожалуйста code, а не spoiler. Так сохраняется форматирование - читать легче.
3. Ну и если уж придираться - я бы не называл классы с маленькой буквы.

PS^ не советую делать timeScale = 0, лучше делать очень маленьким, но больше 0.

Код
using UnityEngine;

public class Pause : MonoBehaviour
{
   private bool paused = false;
   public string pausedText;

   public void Update()
   {
     if (Input.GetKeyUp(KeyCode.V))
     {
       if (!paused)
       {
         Time.timeScale = 0;
         paused = true;
       }
       else
       {
         Time.timeScale = 1;
         paused = false;
       }
     }
   }

   public void OnGUI()
   {
     if(paused) GUI.Label(new Rect(100, 100, 200, 200), pausedText);
   }   
}
 
Сообщение1. Главное! Вам не кажется странным, что во всех примерах в мануале функции GUI вызываются внутри метода OnGUI? Может это неспроста?
2. Используйте пожалуйста code, а не spoiler. Так сохраняется форматирование - читать легче.
3. Ну и если уж придираться - я бы не называл классы с маленькой буквы.

PS^ не советую делать timeScale = 0, лучше делать очень маленьким, но больше 0.

Код
using UnityEngine;

public class Pause : MonoBehaviour
{
   private bool paused = false;
   public string pausedText;

   public void Update()
   {
     if (Input.GetKeyUp(KeyCode.V))
     {
       if (!paused)
       {
         Time.timeScale = 0;
         paused = true;
       }
       else
       {
         Time.timeScale = 1;
         paused = false;
       }
     }
   }

   public void OnGUI()
   {
     if(paused) GUI.Label(new Rect(100, 100, 200, 200), pausedText);
   }   
}

Автор - seaman
Дата добавления - 07 Янв 2015 в 02:33
UnityCreatorSisДата: Вт, 13 Янв 2015, 12:08 | Сообщение # 1365
Нет аватара
 
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline
Сделал скрипт на вращение объекта по кругу, перевел в unity3d - не работает. Почему? Ошибка: transform.position assign attempt for 'car' is not valid. Input position is { NaN, NaN, 730.244629 }.
//---
Код Unity:
Код
using UnityEngine;
using System.Collections;
using System.ComponentModel;
using System.Linq;
using System.Text;
public class Main : MonoBehaviour {
bool left = false;
bool right = false;
bool down = false;
bool up = false;
private float a = 0;
private float x;
private float y;
float _x;
float _y;
void Start () {
//transform.position = new Vector3(100f, 100f, transform.position.z);
x = transform.position.x;
y = transform.position.y;
}
void Update () {
x = x + 5 * Mathf.Acos(a);
y = y + 5 * Mathf.Asin(a);
a += 0.1f;
_x = Mathf.Round(x);
_y = Mathf.Round(y);
transform.position = new Vector3(_x, _y, transform.position.z);
}
}
Код на WinForms
//---------------------------------------------------------------------
double a, x, y;
public Form1()
{
InitializeComponent();
pictureBox1.Location = new Point(100, 100);
a = 0;
x = y = 100;
}
private void Form1_Load(object sender, EventArgs e)
{
a = 0;
//pictureBox1.Location = new Point(100, 100);
// y = 100;
}
/* private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillEllipse(new SolidBrush(Color.Black), (int)x, (int)y, 20, 20);
}*/
private void timer1_Tick(object sender, EventArgs e)
{
x = x - 2 * Math.Cos(a);
y = y - 2 * Math.Sin(a);
a -= 0.1;
pictureBox1.Location = new Point(Convert.ToInt32(Math.Ceiling(x)), Convert.ToInt32(Math.Ceiling(y)));
}


Не надо бить компьютер - он вам отомстит.
 
СообщениеСделал скрипт на вращение объекта по кругу, перевел в unity3d - не работает. Почему? Ошибка: transform.position assign attempt for 'car' is not valid. Input position is { NaN, NaN, 730.244629 }.
//---
Код Unity:
Код
using UnityEngine;
using System.Collections;
using System.ComponentModel;
using System.Linq;
using System.Text;
public class Main : MonoBehaviour {
bool left = false;
bool right = false;
bool down = false;
bool up = false;
private float a = 0;
private float x;
private float y;
float _x;
float _y;
void Start () {
//transform.position = new Vector3(100f, 100f, transform.position.z);
x = transform.position.x;
y = transform.position.y;
}
void Update () {
x = x + 5 * Mathf.Acos(a);
y = y + 5 * Mathf.Asin(a);
a += 0.1f;
_x = Mathf.Round(x);
_y = Mathf.Round(y);
transform.position = new Vector3(_x, _y, transform.position.z);
}
}
Код на WinForms
//---------------------------------------------------------------------
double a, x, y;
public Form1()
{
InitializeComponent();
pictureBox1.Location = new Point(100, 100);
a = 0;
x = y = 100;
}
private void Form1_Load(object sender, EventArgs e)
{
a = 0;
//pictureBox1.Location = new Point(100, 100);
// y = 100;
}
/* private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillEllipse(new SolidBrush(Color.Black), (int)x, (int)y, 20, 20);
}*/
private void timer1_Tick(object sender, EventArgs e)
{
x = x - 2 * Math.Cos(a);
y = y - 2 * Math.Sin(a);
a -= 0.1;
pictureBox1.Location = new Point(Convert.ToInt32(Math.Ceiling(x)), Convert.ToInt32(Math.Ceiling(y)));
}

Автор - UnityCreatorSis
Дата добавления - 13 Янв 2015 в 12:08
игнатДата: Вт, 13 Янв 2015, 15:07 | Сообщение # 1366
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
Потому что:
Цитата
Ошибка: transform.position assign attempt for 'car' is not valid. Input position is { NaN, NaN, 730.244629 }.

Перевожу: позиция объекта car не правильна. Входящая позиция (бесконечность, бесконечность, 730). Проблема в логике.



Правила форума · участник GCC
 
СообщениеПотому что:
Цитата
Ошибка: transform.position assign attempt for 'car' is not valid. Input position is { NaN, NaN, 730.244629 }.

Перевожу: позиция объекта car не правильна. Входящая позиция (бесконечность, бесконечность, 730). Проблема в логике.

Автор - игнат
Дата добавления - 13 Янв 2015 в 15:07
seamanДата: Вт, 13 Янв 2015, 15:36 | Сообщение # 1367
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Изучите функции Acos и Asin.
 
СообщениеИзучите функции Acos и Asin.

Автор - seaman
Дата добавления - 13 Янв 2015 в 15:36
СахарДата: Вс, 25 Янв 2015, 15:47 | Сообщение # 1368
Нет аватара
 
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Всем привет. Написал скрип на С# суть его такова при нажатий кнопки «escape» у нас выскакивает меню с возможностью выйти из игры и тому подобно проще говоря я попытался создать меню паузы.

При нажатий клавиши «escape» меню открывается, а при повторном нажатий закрывается, но при нажатий на кнопку «Продолжить» игра оживает, но само GUI окошко остаётся до повторного нажатия. Подскажите в чем проблема.
И ещё такой вопрос можно ли заблокировать движение камеры?
 
СообщениеВсем привет. Написал скрип на С# суть его такова при нажатий кнопки «escape» у нас выскакивает меню с возможностью выйти из игры и тому подобно проще говоря я попытался создать меню паузы.

При нажатий клавиши «escape» меню открывается, а при повторном нажатий закрывается, но при нажатий на кнопку «Продолжить» игра оживает, но само GUI окошко остаётся до повторного нажатия. Подскажите в чем проблема.
И ещё такой вопрос можно ли заблокировать движение камеры?

Автор - Сахар
Дата добавления - 25 Янв 2015 в 15:47
AswoДата: Вс, 25 Янв 2015, 16:46 | Сообщение # 1369
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Сахар, у меня ваш код работает, но вы делаете несколько не оптимально условия.
Код
using UnityEngine;
using System.Collections;

public class Paused_menu : MonoBehaviour
{
     //Переменные  
     private bool paused_menu = false;
     //end  

     void Update()
     {
         if (Input.GetKeyUp(KeyCode.Escape))
         {
             paused_menu = paused_menu ? false : true;
         }

         Time.timeScale = paused_menu ? 0 : 1;
     }

     void OnGUI()
     {
         if (paused_menu == true)
         {
             GUI.Box(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 180), "Пауза");
             if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 80, 180, 30), "Продолжить"))
             {
                 paused_menu = false;
             }
             if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 40, 180, 30), "Выход"))
             {
                 Application.Quit();
             }
         }
     }
}


end.
 
СообщениеСахар, у меня ваш код работает, но вы делаете несколько не оптимально условия.
Код
using UnityEngine;
using System.Collections;

public class Paused_menu : MonoBehaviour
{
     //Переменные  
     private bool paused_menu = false;
     //end  

     void Update()
     {
         if (Input.GetKeyUp(KeyCode.Escape))
         {
             paused_menu = paused_menu ? false : true;
         }

         Time.timeScale = paused_menu ? 0 : 1;
     }

     void OnGUI()
     {
         if (paused_menu == true)
         {
             GUI.Box(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 180), "Пауза");
             if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 80, 180, 30), "Продолжить"))
             {
                 paused_menu = false;
             }
             if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 40, 180, 30), "Выход"))
             {
                 Application.Quit();
             }
         }
     }
}

Автор - Aswo
Дата добавления - 25 Янв 2015 в 16:46
игнатДата: Вс, 25 Янв 2015, 16:47 | Сообщение # 1370
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
Код
using UnityEngine;
using System.Collections;

public class Paused_menu : MonoBehaviour {

      //Переменные
      private bool paused_menu = false;
      public string payse_keypad = "escape";
      private bool paused_GUI = false;
      //end
     
   void Update ()   
      {
          if (Input.GetKeyUp(payse_keypad))
          {
              if (paused_menu == false)
              {
                  Time.timeScale = 0;
                      paused_menu = true;
              }
              else
              {
                  Time.timeScale = 1;
                      paused_menu = false;
              }
//
//вот здесь какая-то бессмыслица - если D==S то D=S
//

          }

          if (paused_GUI == true)
          {
              Time.timeScale = 1;
                  paused_menu = false;
                      paused_GUI = false;
//
//здесь - опять
//
          }
   }

      void OnGUI()
      {
          if (paused_menu == true || paused_GUI == true)
          {
              GUI.Box(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 180), "Пауза");
              if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 80, 180, 30), "Продолжить"))
              {
                  paused_GUI = true;//Что за что отвечает??
              }
              if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 40, 180, 30), "Выход"))
              {
                  Application.Quit();
              }
          }
      }
}

Придумайте в начале логику, а уж потом пишите.



Правила форума · участник GCC
 
Сообщение
Код
using UnityEngine;
using System.Collections;

public class Paused_menu : MonoBehaviour {

      //Переменные
      private bool paused_menu = false;
      public string payse_keypad = "escape";
      private bool paused_GUI = false;
      //end
     
   void Update ()   
      {
          if (Input.GetKeyUp(payse_keypad))
          {
              if (paused_menu == false)
              {
                  Time.timeScale = 0;
                      paused_menu = true;
              }
              else
              {
                  Time.timeScale = 1;
                      paused_menu = false;
              }
//
//вот здесь какая-то бессмыслица - если D==S то D=S
//

          }

          if (paused_GUI == true)
          {
              Time.timeScale = 1;
                  paused_menu = false;
                      paused_GUI = false;
//
//здесь - опять
//
          }
   }

      void OnGUI()
      {
          if (paused_menu == true || paused_GUI == true)
          {
              GUI.Box(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 180), "Пауза");
              if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 80, 180, 30), "Продолжить"))
              {
                  paused_GUI = true;//Что за что отвечает??
              }
              if (GUI.Button(new Rect(Screen.width / 2 - 90, Screen.height / 2 - 40, 180, 30), "Выход"))
              {
                  Application.Quit();
              }
          }
      }
}

Придумайте в начале логику, а уж потом пишите.

Автор - игнат
Дата добавления - 25 Янв 2015 в 16:47
МаксимДата: Пн, 02 Фев 2015, 20:15 | Сообщение # 1371
...
 
Сообщений: 1113
Награды: 9
Репутация: 345
Статус: Offline
2D движение, вправо и влево. Почему-то спрайт увеличивается чуть ли не в 2 раза. В чём может быть ошибка?



 
Сообщение2D движение, вправо и влево. Почему-то спрайт увеличивается чуть ли не в 2 раза. В чём может быть ошибка?


Автор - Максим
Дата добавления - 02 Фев 2015 в 20:15
игнатДата: Пн, 02 Фев 2015, 22:40 | Сообщение # 1372
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
Цитата Максим ()
Vector3 theScale = transform.localScale;
theScale.x = dir;
transform.localScale = theScale;

Может всё-таки position?



Правила форума · участник GCC
 
Сообщение
Цитата Максим ()
Vector3 theScale = transform.localScale;
theScale.x = dir;
transform.localScale = theScale;

Может всё-таки position?

Автор - игнат
Дата добавления - 02 Фев 2015 в 22:40
игнатДата: Вт, 03 Фев 2015, 16:51 | Сообщение # 1373
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
New Кажется я что-то пропустил:
`All blocking WWW functions have been deprecated, please use one of the asynchronous functions instead.'



Правила форума · участник GCC
 
СообщениеNew Кажется я что-то пропустил:
`All blocking WWW functions have been deprecated, please use one of the asynchronous functions instead.'

Автор - игнат
Дата добавления - 03 Фев 2015 в 16:51
seamanДата: Ср, 04 Фев 2015, 00:02 | Сообщение # 1374
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
Может всё-таки position?

Ну это ж флип. Как его позицией сделать?
Только вот что такое в данном случае "dir = 0;"? Масштаб = 0?
Второе. Отражается только если уже не отражен. А как тогда назад вернуть?
 
Сообщение
Цитата
Может всё-таки position?

Ну это ж флип. Как его позицией сделать?
Только вот что такое в данном случае "dir = 0;"? Масштаб = 0?
Второе. Отражается только если уже не отражен. А как тогда назад вернуть?

Автор - seaman
Дата добавления - 04 Фев 2015 в 00:02
игнатДата: Ср, 04 Фев 2015, 08:32 | Сообщение # 1375
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
Максим, странно, но у меня всё работает нормально.


Правила форума · участник GCC
 
СообщениеМаксим, странно, но у меня всё работает нормально.

Автор - игнат
Дата добавления - 04 Фев 2015 в 08:32
МаксимДата: Ср, 04 Фев 2015, 20:53 | Сообщение # 1376
...
 
Сообщений: 1113
Награды: 9
Репутация: 345
Статус: Offline
seaman, dir = 0 - герой смотрит прямо( ну на тебя), 1 - вправо(прямо движение), -1 - влево( назад движение)

 
Сообщениеseaman, dir = 0 - герой смотрит прямо( ну на тебя), 1 - вправо(прямо движение), -1 - влево( назад движение)

Автор - Максим
Дата добавления - 04 Фев 2015 в 20:53
seamanДата: Ср, 04 Фев 2015, 23:12 | Сообщение # 1377
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
dir = 0 - герой смотрит прямо( ну на тебя)

Код
dir = 0;
theScale.x = dir;

Что будет?
 
Сообщение
Цитата
dir = 0 - герой смотрит прямо( ну на тебя)

Код
dir = 0;
theScale.x = dir;

Что будет?

Автор - seaman
Дата добавления - 04 Фев 2015 в 23:12
МаксимДата: Ср, 01 Апр 2015, 15:29 | Сообщение # 1378
...
 
Сообщений: 1113
Награды: 9
Репутация: 345
Статус: Offline
Разбираю скрипты. Есть один на JS и там есть такая фраза
Код
if(options_on)   

как в С# написать аналогичное условие?


 
СообщениеРазбираю скрипты. Есть один на JS и там есть такая фраза
Код
if(options_on)   

как в С# написать аналогичное условие?

Автор - Максим
Дата добавления - 01 Апр 2015 в 15:29
AswoДата: Ср, 01 Апр 2015, 15:34 | Сообщение # 1379
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Максим, какой тип у options_on?

end.
 
СообщениеМаксим, какой тип у options_on?

Автор - Aswo
Дата добавления - 01 Апр 2015 в 15:34
МаксимДата: Ср, 01 Апр 2015, 15:58 | Сообщение # 1380
...
 
Сообщений: 1113
Награды: 9
Репутация: 345
Статус: Offline
Aswo, boolean, сразу false у неё стоит

 
СообщениеAswo, boolean, сразу false у неё стоит

Автор - Максим
Дата добавления - 01 Апр 2015 в 15:58
Форум Игроделов » UNITY3D » СКРИПТИНГ » Unity 3d - Помощь в написании скриптов.
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024