Результаты поиска
| |
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 кинул
|
|
| |
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, так что, дело не в этом.
|
|
| |
|