Четверг, 25 Апреля 2024, 05:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Записи участника » Knife_Kill [45]
Результаты поиска
Knife_KillДата: Среда, 11 Ноября 2015, 09:16 | Сообщение # 1 | Тема: Сохранение в мобильной игре
частый гость
Сейчас нет на сайте
Цитата irinautkina ()
PlayerPrefs.SetInt("maxBullet", saveBull);...

Благодарю

Добавлено (10 ноября 2015, 20:41)
---------------------------------------------
Хммм.. Ребята, на ПК данный код работает (вроде как), а на Андроид нет, чем может быть проблема? PlayerPrefs на Android работает так же как и на ПК?

Код
using UnityEngine;
using System.Collections;

public class MainMenu : MonoBehaviour
{

    public AudioSource music;
    public bool isActive = false;
    public GameObject bonused;

    // Use this for initialization
    void Start()
    {
        bonused.GetComponent<ControlPlayer>().maxBullet = PlayerPrefs.GetInt("maxBull");
        bonused.GetComponent<ControlPlayer>().maxInvis = PlayerPrefs.GetInt("maxInvis");
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 250, Screen.height / 2 - 20, 150, 60), "Play"))
        {
            Application.LoadLevel("game");
        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 20, 150, 60), "Sound: On/Off"))
        {
            if (isActive == true)
            {
                music.mute = false;
                isActive = false;
            }

            else if (isActive == false)
            {
                music.mute = true;
                isActive = true;
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 70, 150, 60), "Shop"))
        {
            bonused.GetComponent<ControlPlayer>().maxBullet++;
            bonused.GetComponent<ControlPlayer>().maxInvis++;
            Save();
        }

        if (GUI.Button(new Rect(Screen.width / 2 + 150, Screen.height / 2 - 20, 150, 60), "Exit"))
        {
            Save();
            Application.Quit();
        }
    }

    void Save()
    {
        int saveBull = bonused.GetComponent<ControlPlayer>().maxBullet;
        int saveInvis = bonused.GetComponent<ControlPlayer>().maxInvis;
        PlayerPrefs.SetInt("maxBullet", saveBull);
        PlayerPrefs.SetInt("maxInis", saveInvis);
        PlayerPrefs.Save();
    }
}

Добавлено (11 ноября 2015, 09:16)
---------------------------------------------
up

Knife_KillДата: Вторник, 10 Ноября 2015, 10:39 | Сообщение # 2 | Тема: Сохранение в мобильной игре
частый гость
Сейчас нет на сайте
Цитата manonedge ()
В плеерпрефс надо не только указать значение, но вызывать функцию сохранения.


Можете привести пример? Зарание благодарю
Knife_KillДата: Вторник, 10 Ноября 2015, 10:15 | Сообщение # 3 | Тема: Сохранение в мобильной игре
частый гость
Сейчас нет на сайте
Здравствуйте, у меня имеется небольшая мобильная игра, так же в игре имеется магазин с улучшениями (пока примитивный), суть в том, что нужно реализовать сохранения значений maxBull и maxInvis, как это сделать? Есть ли уроки? Пробовал через PlayerPrefs, но в таком случае в игре при подбирании бонуса ничего не происходит (скорее всего значение становится = 0, почему? (до этого все работало, но при выходе из игры все значения сбрасывались 0)
"bonused" - префаб с значениями (игрок), во второй сцене он создается.

Код
using UnityEngine;
using System.Collections;

public class MainMenu : MonoBehaviour
{

    public AudioSource music;
    public bool isActive = false;
    public GameObject bonused;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 250, Screen.height / 2 - 20, 150, 60), "Play"))
        {
            Application.LoadLevel("game");

            if (PlayerPrefs.HasKey("maxBullet") && PlayerPrefs.HasKey("maxInis"))

            {
                bonused.GetComponent<ControlPlayer>().maxBullet = PlayerPrefs.GetInt("maxBull");
                bonused.GetComponent<ControlPlayer>().maxInvis = PlayerPrefs.GetInt("maxInvis");
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 20, 150, 60), "Sound: On/Off"))
        {
            if (isActive == true)
            {
                music.mute = false;
                isActive = false;
            }

            else if (isActive == false)
            {
                music.mute = true;
                isActive = true;
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 70, 150, 60), "Shop"))
        {
            bonused.GetComponent<ControlPlayer>().maxBullet++;
            bonused.GetComponent<ControlPlayer>().maxInvis++;
           Save();
        }

        if (GUI.Button(new Rect(Screen.width / 2 + 150, Screen.height / 2 - 20, 150, 60), "Exit"))
        {
            Application.Quit();
        }
    }

    void Save()
    {
        int saveBull = bonused.GetComponent<ControlPlayer>().maxBullet;
        int saveInvis = bonused.GetComponent<ControlPlayer>().maxInvis;
        PlayerPrefs.SetInt("maxBullet", saveBull);
        PlayerPrefs.SetInt("maxInis", saveInvis);
    }
}


П.с. про вред использования GetComponent прошу не писать, в дальнейшем попробую найти альтернативу.

Добавлено (10 ноября 2015, 10:15)
---------------------------------------------
АП

Сообщение отредактировал Knife_Kill - Вторник, 10 Ноября 2015, 10:15
Knife_KillДата: Пятница, 28 Августа 2015, 20:07 | Сообщение # 4 | Тема: THE ATOMY [Top-down shooter] [Поддержите нас на Greenlight!]
частый гость
Сейчас нет на сайте
Очень даже неплохо, проголосовал.
Knife_KillДата: Воскресенье, 23 Августа 2015, 17:35 | Сообщение # 5 | Тема: NullReferenceException: Object reference not set to an insta
частый гость
Сейчас нет на сайте
Здравствуйте, постоянно выскакивает ошибка "NullReferenceException: Object reference not set to an instance of an object", что бы я не делал, как бы по-другому не писал скрипт.
Вот код:
Код
using UnityEngine;
using System.Collections;

public class BulletForce : MonoBehaviour
{

     void Start()
     {
         gameObject.transform.Rotate(180, 0, 0);
     }

     void Update()
     {
         Shoot();
     }

     void Shoot()
     {
         Control cont = GetComponent<Control>();
         if (cont.rotate == true)
         {
             transform.Translate(Vector3.right * 10 * Time.deltaTime);
         }
         else if (cont.rotate == false)
         {
             transform.Translate(Vector3.left * 10 * Time.deltaTime);
         }
     }
}


P.s. в Control есть bool переменная rotate отвечающая за поворот персонажа.
Где ошибка?
Knife_KillДата: Суббота, 22 Августа 2015, 21:05 | Сообщение # 6 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
seaman, ок, спасибо.
Knife_KillДата: Суббота, 22 Августа 2015, 13:30 | Сообщение # 7 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Здравствуйте, у меня на объекте есть 2 Box Collider'a 2D, на первом у меня IsTrigger = false; на втором = true;
Я обращаюсь к объекту
Код
GameObject wall = GameObject.Find("Wall");
wall.GetComponent<BoxCollider2D>().isTrigger = false;

Но смысл в том, что этот скрипт взаимодействует с 1 Вox Collider'oм, но мне надо чтоб взаимодействовал с 2ым, как это можно сделать?
(менять местами Collider'ы в инспекторе не предлагать т.к. с 1ым коллайдером у меня тоже есть взаимодействие)

На сколько я понимаю - надо как-то задействовать GetComponents
Knife_KillДата: Суббота, 22 Августа 2015, 09:48 | Сообщение # 8 | Тема: Проблемка с OnTriggerStay
частый гость
Сейчас нет на сайте
beril, тоже так думал сделать, но думал есть более гуманный способ
Knife_KillДата: Пятница, 21 Августа 2015, 21:45 | Сообщение # 9 | Тема: Проблемка с OnTriggerStay
частый гость
Сейчас нет на сайте
Здравствуйе, в общем есть такой скрип:
Код
using UnityEngine;
using System.Collections;

public class InvisPlatform : MonoBehaviour
{

  // Use this for initialization
  void Start ()
     {
   
  }
   
  // Update is called once per frame
  void Update ()
     {
   
  }

     void OnTriggerStay2D(Collider2D btn)
     {
         if ((btn.name == "Player") && (Input.GetKeyDown(KeyCode.E)))
         {
             GameObject findInvis = GameObject.FindGameObjectWithTag("InvisPlatf");
             Destroy(findInvis);
         }
     }
}


Проблема в том, что мне нужно чтоб человек зашел в определенный триггер (он не большого размера), нажал на E и пошел дальше (все это делается сразу, без остановок), но проблема в том что если я делаю как в вышеописанном скрипте - то все работает, но только если персонаж побегает по этому триггеру некоторое время (ну, оно-то ясно почему).
Но если я заменю Stay на Enter или еще что-либо, то не работает нажатие кнопки (тоже ясно почему). Как сделать так чтоб при вхождении в этот триггер и нажатии на кнопку происходил какой-либо скрипт?
Knife_KillДата: Пятница, 31 Июля 2015, 12:35 | Сообщение # 10 | Тема: Есть ли книги/уроки по lvl дизайну платформеров?
частый гость
Сейчас нет на сайте
Wookie, один из уроков, который Adel0n кинул smile
Knife_KillДата: Пятница, 31 Июля 2015, 00:35 | Сообщение # 11 | Тема: Есть ли книги/уроки по lvl дизайну платформеров?
частый гость
Сейчас нет на сайте
Adel0n, Сойдет, огромное спасибо
Knife_KillДата: Четверг, 30 Июля 2015, 17:48 | Сообщение # 12 | Тема: Есть ли книги/уроки по lvl дизайну платформеров?
частый гость
Сейчас нет на сайте
Здравствуйте, создавая платформер заметил, что левел дизайн у меня никчемный.. Вот и хотел поинтересоваться, есть ли книги/уроки/статьи про lvl дизайн?
И если есть, не могли бы вы поделиться ссылочкой? Зарание благодарю

Добавлено (30 июля 2015, 17:48)
---------------------------------------------
Ах да, ссылку на pro.level-design не давайте, уже читал =)

Knife_KillДата: Среда, 29 Июля 2015, 23:21 | Сообщение # 13 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
ivan2009, Спасибо, немного продолбавшись с GetComponent все же более-мение сделал. работает через раз, но главное что работает, спасибо огромное!
Knife_KillДата: Среда, 29 Июля 2015, 18:52 | Сообщение # 14 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Есть вот такой вот код:

Код

using PigeonCoopToolkit.Navmesh2D;  
using UnityEngine;  
using System.Collections;  
using System.Collections.Generic;  

public class PathFollower : MonoBehaviour  
{  

      public Transform pathingTarget;  
      private List<Vector2> path;  
     
   // LateUpdate is called once per frame  
   void Update () {  

       if(Input.GetKeyDown(KeyCode.E))  
       {  
           path = NavMesh2D.GetSmoothedPath(transform.position, pathingTarget.position);  
       }  

          if(path != null && path.Count != 0)  
          {  
              transform.position = Vector2.MoveTowards(transform.position, path[0], 5*Time.deltaTime);  
              if(Vector2.Distance(transform.position,path[0]) < 0.01f)  
              {  
                  path.RemoveAt(0);  
              }  
          }  
   }  
}


Работает он только тогда, когда персонаж войдет в специальную зону и нажмет "E", как сделать что бы скрипт работал сразу, когда персонаж войдет в эту зону? (скрипт висит на противнике)
Если я убираю строчку " if(Input.GetKeyDown(KeyCode.E))" - то при входе в зону ничего не происходит...

Мне тут подсказали вот что:


Но как это можно сделать? А точней построить путь до таргета. Через Vector2.Distance? Если да, то как проверить вот это - точка предыдущего (при построении пути) таргета достигнута?
Knife_KillДата: Среда, 29 Июля 2015, 13:13 | Сообщение # 15 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Есть вот такой вот код:

Код
using PigeonCoopToolkit.Navmesh2D;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PathFollower : MonoBehaviour
{

     public Transform pathingTarget;
     private List<Vector2> path;
   
  // LateUpdate is called once per frame
  void Update () {

      if(Input.GetKeyDown(KeyCode.E))
      {
          path = NavMesh2D.GetSmoothedPath(transform.position, pathingTarget.position);
      }

         if(path != null && path.Count != 0)
         {
             transform.position = Vector2.MoveTowards(transform.position, path[0], 5*Time.deltaTime);
             if(Vector2.Distance(transform.position,path[0]) < 0.01f)
             {
                 path.RemoveAt(0);
             }
         }
  }
}


Работает он только тогда, когда персонаж войдет в специальную зону и нажмет "E", как сделать что бы скрипт работал сразу, когда персонаж войдет в эту зону? (скрипт висит на противнике)
Если я убираю строчку " if(Input.GetKeyDown(KeyCode.E))" - то при входе в зону ничего не происходит...

Мне тут подсказали вот что:

Но как это можно сделать? А точней построить путь до таргета. Через Vector2.Distance? Если да, то как проверить вот это - точка предыдущего (при построении пути) таргета достигнута?


Сообщение отредактировал Knife_Kill - Среда, 29 Июля 2015, 17:19
Knife_KillДата: Среда, 29 Июля 2015, 12:50 | Сообщение # 16 | Тема: Создание AI в 2D игре
частый гость
Сейчас нет на сайте
KamiRonin, Спасибо, попробую разобраться.
Начну, тогда, с трансформа...

Добавлено (29 июля 2015, 12:50)
---------------------------------------------
В общем, с горем-пополам решил проблему с Navmesh'em, но появилась другая.
(Код, тупо скопированный отсюда (позже перепишу сам). Проблема заключается в том, что противник следит за нами, но он вертится по оси y "на сколько хочет", как сделать поворот строго на 180 градусов? На сколько я понимаю, как- то в LookAt это можно сделать, но как?

Код
public class Enemy : MonoBehaviour
{
     public Transform _target; // Указываем переменную, к которой будет двигаться наш агент   
     NavMeshAgent _agent; // Указываем переменную агента   
     Transform _home;

     void Start()
     {
         _agent = (NavMeshAgent)this.GetComponent("NavMeshAgent"); // Указываем, что переменная _agent - это наш агент.   
     }

     

     void Update()
     {
         GameObject player = GameObject.FindGameObjectWithTag("Player");
         pos.y = transform.position.y;
         _home = transform.parent.transform;
         _agent.SetDestination(_target.position); // Заставляем агента двигаться в сторону _target'а   

         if (Vector3.Distance(_agent.transform.position, player.transform.position) < 100)
         {
             transform.LookAt(pos);
             _target = player.transform;
         }

         else
         {
             _target = _home;
         }

         if (Vector3.Distance(_agent.transform.position, player.transform.position) < 50)

         {
             _agent.speed = 0;
         }

         else
         {
             _agent.speed = 3.5f;
         }
     }
}
Knife_KillДата: Среда, 29 Июля 2015, 00:20 | Сообщение # 17 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Здравствуйте, в связи с тем, что у меня, в моем 2D проекте возникли проблемы с NavMesh'eм, то я решил попробовать сделать аналогичный платформер, но уже в 3D проекте (при создании проекта вместо 2D выбрать 3D), стоит ли это делать? И решится ли проблема с NavMesh'ем? (по идее должна)
... Уже сил нет возиться с этим NavMeshem в 2D проекте...
Knife_KillДата: Вторник, 28 Июля 2015, 19:58 | Сообщение # 18 | Тема: Создание AI в 2D игре
частый гость
Сейчас нет на сайте
Здравствуйте! Как реализовать передвижение противника (да и вообще, любого предмета) в Юньке? (Я имею ввиду простые AI)
Многие, наверно, скажут - NavMesh в помощь тебе, но не тут-то было, он работает только с MeshRender'om.
Так же я наткнулся на NavMesh2D (который в Assetах стоит 15$), естественно скачал, все сделал как в уроке, вроде заработало, но только при нажатии на "E".
Стоит мне убрать строчку с "if(Input...)" как вдруг ничего не работает (причем я очень многое пытался пихать вместо этого If'a, все без толку).
Код
using PigeonCoopToolkit.Navmesh2D;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PathFollower : MonoBehaviour
{

     public Transform pathingTarget;
     private List<Vector2> path;
   
  // LateUpdate is called once per frame
  void Update () {
      if(Input.GetKeyDown(KeyCode.E))
      {
          path = NavMesh2D.GetSmoothedPath(transform.position, pathingTarget.position);
      }

         if(path != null && path.Count != 0)
         {
             transform.position = Vector2.MoveTowards(transform.position, path[0], 5*Time.deltaTime);
             if(Vector2.Distance(transform.position,path[0]) < 0.01f)
             {
                 path.RemoveAt(0);
             }
         }
  }
}


Прокопавшись долгое время с этим скриптом, нашел другой урок, с таким вот коддом (примерно):
Код
using UnityEngine;
using System.Collections;

public class AI : MonoBehaviour {

     public GameObject Cube_1;
     public GameObject Cube_2;

  // Use this for initialization
  void Start () {
   
  }
   
  // Update is called once per frame
  void Update () {

         if(Vector3.Distance(transform.position, Cube_1.transform.position) <= 1f)
         {
             // transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Cube_2.transform.position - transform.position), 270 * Time.deltaTime);
             transform.rotation = new Quaternion(0, -180, 0, 0);
             transform.position += Vector3.forward * 50 * Time.deltaTime;
         }

         if (Vector3.Distance(transform.position, Cube_2.transform.position) <= 1f)
         {
             transform.rotation = new Quaternion(0, -180, 0, 0);
             transform.position += Vector3.forward * 50 * Time.deltaTime;
         }

     }
}

И код тоже, вроде бы, работает. Но объект на котором висит этот скрипт не двигается, куда бы я transform.position... не ставил.
У меня возникло несколько вопросом, каким лучше путем двигаться? Через скаченный NavMesh или же через этот полу-самописный код?
И, наконец, почему не работает transform.position (во втором коде) или же не срабатывает "path = NavMesh2D.GetSmoothedPath(transform.position, pathingTarget.position);" если я уберу или изменю if(...)?
Или же мне лучше не заморачиваться с этим и поискать еще способы?
Knife_KillДата: Вторник, 28 Июля 2015, 10:36 | Сообщение # 19 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
pixeye, Спасибо!

Сообщение отредактировал Knife_Kill - Вторник, 28 Июля 2015, 10:39
Knife_KillДата: Вторник, 28 Июля 2015, 09:19 | Сообщение # 20 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Здравствуйте, возникла проблема при создании скрипта стрельбы, а именно - пуля создается, но не летит.

Код
using UnityEngine;
using System.Collections;

public class SpawnBullet : MonoBehaviour {

     public int forceSpeed = 800;
     public GameObject bullet;

     // Use this for initialization
     void Start()
     {

     }

     // Update is called once per frame
     void Update()
     {
         if (Input.GetKeyDown(KeyCode.Space))
         {
             Transform prefabInstance = (Transform)Instantiate(bullet, GameObject.Find("Player").transform.position, Quaternion.identity);
           //  prefabInstance.GetComponent<Rigidbody2D>().AddForce(transform.right * 800);

         }

     }
     void FixUpdate()
     {

         prefabInstance.GetComponent<Rigidbody2D>().AddForce(transform.forward * 800);
     }
}


Самое интересное, если я "prefabInstance.GetComponent<Rigidbody2D>().AddForce(transform.forward * 800);" прописываю в Update, то код запускается, но ничего не происходит (т.к. физика прописывается в FixUpdate), но если я пропишу эту же строчку в FixUpdate, то пишет что-то типа "имя prefabInstance не существует в данном контексте". Как это исправить?
P.s. пытался прописать private GameObject prefabInstance = null; но ничего не произошло, пуля так же спавнится, но не летит (тупо падает).
Так же, на пуле масса 0.1, так что, дело не в этом.
Форум игроделов » Записи участника » Knife_Kill [45]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг