using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq;
public class Snake : MonoBehaviour { // Tail Prefab public GameObject tailPrefab;
// Speed public float speed = 0.01f;
// Drow in next movement? private bool ate = false;
// Current Movement Direction private Vector2 dir = Vector2.right;
// Keep track of tail private List<Transform> tail = new List<Transform>();
// Use this for initialization void Start () { // Move snake every 300ms InvokeRepeating("Move", speed, speed); }
// Update is called once per frame void Update () { var h = Input.GetAxisRaw("Horizontal"); var v = Input.GetAxisRaw("Vertical");
if (v > 0) { dir = Vector2.up; } else if (v < 0) { dir = Vector2.down; }
if (h < 0) { dir = Vector2.left; } else if (h > 0) { dir = Vector2.right; } }
void Move() { // Save current position (gap will be here) Vector2 v = transform.position;
// Move head into new direction (now there is a gap) transform.Translate(dir);
// Ate? Then insert track into gap if (ate) { // Set track into grap var track = Instantiate(tailPrefab, v, Quaternion.identity) as GameObject;
// Keep track into tail list tail.Insert(0, track.transform);
// Reset flag ate = false; } else if (tail.Count > 0) // Do we have a tail? { // Move last tail element to where the head was tail.Last().position = v;
// Add to front of list tail.Insert(0, tail.Last());
// Remove from the back tail.RemoveAt(tail.Count - 1); } }
void OnTriggerEnter2D(Collider2D coll) { // Food? if (coll.name.StartsWith("FoodPrefab")) { // Get longer in next Move coll ate = true;
// Remove the food Destroy(coll.gameObject); } else // Collided with Tail or Border { // ToDo show lose scene Debug.Log("You lost."); } } }
SpawnFood.cs
Код
using UnityEngine; using System.Collections;
public class SpawnFood : MonoBehaviour { // Food Prefab public GameObject foodPrefab;
// Borders public Transform borderTop; public Transform borderBottom; public Transform borderLeft; public Transform borderRight;
// Use this for initialization void Start() { // Spawn food every 4 second, starting in 3 InvokeRepeating("Spawn", 3, 4); }
// Spawn a food void Spawn() { // x position between Left & Right border int x = (int)Random.Range(borderLeft.position.x, borderRight.position.x);
// y position between Bottom & Top border int y = (int)Random.Range(borderBottom.position.y, borderTop.position.y);
// Instantiate the food at (x, y) Instantiate(foodPrefab, new Vector2(x, y), Quaternion.identity); } }
Может быть, действительно, баг. Я заметил, работает через раз. Если во время запуска кликать и нажимать W, то частенько начинает работать.
Добавлено (25 августа 2015, 14:37) --------------------------------------------- Я решил проблему. Просто во время загрузки приложения нужно кликать мышкой по сцене и нажимать W, тогда 100% начинает обрабатывтаь клавиши. Нужно только придумать, где руководство пользователя написать. Может исправят баг.
Сообщение отредактировал 8Observer8 - Вторник, 25 Августа 2015, 14:39
Он медленнее запускается. А в сентябре на Chrome не будет запускаться. Мне этот браузер больше нравится. Для моих простых игр пока хватит WebGL Preview. Может к тому времени, как я буду сильнее и выйдет полноценный WebGL, без Preview.
Мне один из разработчиков ответил здесь, что это исправят в 5.2 и можно попробовать Application.ExternalCall("window.focus();");
Цитата
I can't test it because I don't have a VK account, but, probably this is a known issue, where the WebGL content will not focus the iframe when clicked on it correctly. This will be fixed in an upcoming release (I believe 5.2), but it is also possible to work around it by calling: Application.ExternalCall("window.focus();"); to force the iframe to be focused.
Добавлено (26 августа 2015, 15:55) --------------------------------------------- Попробовал я добавить команду: Application.ExternalCall("window.focus();");
Клавиши не заработати. Вывод: буду использовать WebPlayer пока не выйдет 5.2.
Добавлено (26 августа 2015, 19:53) ---------------------------------------------
ЦитатаVinchensoo ()
Да веб-плеер пока еще вполне норм.
Пусть в Хром не работает, зато в FireFox и Opera - нормально.
Я сравнил по Марио. В плеере работает без задержек, а WebGL неприятно лагает.
Добавлено (27 августа 2015, 14:09) --------------------------------------------- Ответили, что вместо ExternalCall нужно использовать ExternalEval, но у меня приложение падает с ошибкой:
Цитата
"An error occured running the Unity content on this page. See your browser's JavaScript console for more info. The error was:Uncaught SyntaxError: Unexpected token )"
Но ведь в документации написано, что for Web Player only. Значет для WeGL не годится.
Я собрал WebGL с опцией "Fastest (very slow builds)" и собрал в WebPlayer. Посмотрите какая разница (это прямые ссылки, не VK):
Пссс, если вы хотите веб, почему не взяли нормальный хтмл5 движок?
Не на столько сильно я хочу веб. Посмотрю будет ли развиваться WebGL в Unity. Буду тестить от версии к верии. Если не будет развиваться и если Web Player выпилят из всех браузеров, то я просто буду собирать на что собирается без особых проблем.
Я понимаю, что это из-за безопасности. Но плеер же качественный и быстрый. Могли бы что-то другое придумать, чем выпиливать. Тогда пока плеер, жду выхода полноценного WebGL и собираю под ПК. Я бы с радость научился собирать под Android с Remote, но у меня его пока нет.
Сообщение отредактировал 8Observer8 - Пятница, 28 Августа 2015, 08:27
Вряд ли что то вменяемое появится в ближайшее время, ну а про полноценный WebGl(излишки кросплатформенности)думать не стоит)(по крайней мере в ближайшее время) Сравниться в "мощности" относительно Wep Player, WebGl не сможет