В принципе, идея моей игры примерно такова: у вас есть ракета с земли и медленно добавьте скорость. По мере того, как он поднимается все выше и выше, я хочу, чтобы камера следила за ракетой, а затем вы можете переместить ракету, чтобы забрать специальные предметы и избежать препятствий. Итак, как мне создать карту ENDLESS в Unity, чтобы моя ракета не улетела с карты. Спасибо!Сделайте бесконечную двумерную карту в Unity
ответ
// Singleton. Translates existing Obstacles and creates additional Obstacles.
// Мир перемещается по игроку.
// Когда этот объект сталкивается, куски уровня деактивируются. // Уровень заканчивается, когда все части уровня деактивированы
общественного класса LevelTranslator: MonoBehaviour { общественности статической LevelTranslator экземпляра = NULL;
// FIELDS
public bool automaticallyStart = false;
public bool isEndless = false;
// Are all of the level pieces used?
public bool levelOver
{
get
{
if (allLevelObjects.Count == 0)
return true;
else return false;
}
}
// Where all of the transforms are attached to
public Transform levelParent = null;
// Prefab to add to the level
public List<Transform> endlessLevelObject_Prefabs = null;
// Where the level starts. ENDLESS!
public Vector3 levelObjectOrigin = new Vector3();
// The last created object. ENDLESS!
public Transform lastCreatedObject = null;
// Contains all of the transforms for the level
public List<Transform> allLevelObjects = new List<Transform>();
// Game Values
public float speed = 5;
public float objectSpacing = 5; // ENDLESS. How much object spacing there is between the current level piece and the going-to-spawn level piece
public Vector3 direction = Vector3.forward;
public bool stopMoving = false;
// Starts the level
public void BeginMovingLevel()
{
StartCoroutine(BeginMovingLevel_Coroutine());
}
IEnumerator BeginMovingLevel_Coroutine()
{
while (!levelOver)
{
if (stopMoving)
{
yield return new WaitForSeconds(Time.deltaTime);
continue;
}
// Moves the Transform Parent. All Objects will be attached to the parent, so it's moving the objects...
levelParent.Translate(speed * direction * Time.deltaTime);
yield return new WaitForSeconds(Time.deltaTime);
if (isEndless)
{
if (Vector3.Distance(lastCreatedObject.position, levelObjectOrigin) >= objectSpacing + Time.deltaTime)
{
Transform t = Instantiate(endlessLevelObject_Prefabs[Random.Range(0, endlessLevelObject_Prefabs.Count)], levelObjectOrigin, Quaternion.identity) as Transform;
t.parent = levelParent;
lastCreatedObject = t;
allLevelObjects.Add(t);
}
}
else
{
if (Vector3.Distance(lastCreatedObject.position, levelObjectOrigin) >= objectSpacing + Time.deltaTime)
{
Transform t = allLevelObjects[0];
t.position = levelObjectOrigin;
t.rotation = Quaternion.identity;
t.parent = levelParent;
t.gameObject.SetActive(true);
lastCreatedObject = t;
allLevelObjects.Remove(t);
}
}
}
}
void Start()
{
if (instance != null && instance != this)
Destroy(gameObject);
instance = this;
if (isEndless)
{
if (lastCreatedObject == null)
{
Debug.LogError("ERROR! It's endless mode, but you didn't assign the lastCreatedObject to a starting object! You fucked up! (Well, it's okay, I did...)");
return;
}
allLevelObjects.Add(lastCreatedObject);
levelObjectOrigin = lastCreatedObject.position;
}
else
{
if (allLevelObjects.Count > 0)
Debug.LogWarning("WARNING! There are no Objects in the allLevelObjects list! Place some there in order to avoid this error!");
lastCreatedObject = allLevelObjects[0];
allLevelObjects.Remove(lastCreatedObject);
levelObjectOrigin = lastCreatedObject.position;
}
// Apply all of the Transforms to the parent
if (automaticallyStart)
BeginMovingLevel();
}
// Whenever an Obstacle collides with this... deactivate the colliding object.
void OnCollisionEnter(Collision c)
{
Transform obstacleT = c.transform;
if (allLevelObjects.Contains(obstacleT))
{
allLevelObjects.Remove(obstacleT);
// "Destroys" the object
obstacleT.gameObject.SetActive(false);
}
}
}
Я использовал это некоторое время назад.
levelParent - это GameObject. Сделайте это пустой GO. The endlessLevelObject_Prefabs ... положить в уровни, которые вы хотите создать.
lastCreatedObject. Установите этот параметр на уровень FIRST.
Чтобы противостоять Гераклиту, не все должно течь.
Например, как я справлялся с этой ситуацией в прошлом, мой основной символ оставался полностью неподвижным, в фиксированной точке 0,0,0, и я породил всю сцену и переместил всю сцену вокруг моего объекта. Вместо того, чтобы заставить вашего персонажа двигаться, сделайте все остальное движением с такой скоростью. Это дает иллюзию, что вы двигаетесь, находясь на самом деле.
В зависимости от сложности того, что вам нужно, вам может потребоваться много манипуляций с другими объектами за пределами вашего корабля.
Удачи вам!
- 1. Сделайте двумерную (двумерную) матрицу в javascript, предоставленную JSON
- 2. Проверка Java для дубликатов в двумерную карту
- 3. Сделайте карту карты?
- 4. Как нарисовать бесконечную 2D-карту/карту, если AbsoluteLayout устарел?
- 5. Сделайте вид окна в игре Unity
- 6. Алгоритм для наиболее эффективного пути через простую двумерную карту
- 7. Сделайте снимок, который можно перевернуть в Unity 4.6
- 8. Unity C# Подождите, а затем сделайте
- 9. Python показывает двумерную функцию PDF
- 10. Как создать бесконечную бесконечную петлю без замораживания?
- 11. Как сортировать двумерную ArrayList
- 12. Сделайте тэг p в поле ввода, нажав на случайную карту
- 13. SpalshScreen в бесконечную петлю
- 14. Java заполняет двумерную таблицу?
- 15. Преобразование вектора координат в двумерную матрицу numpy
- 16. Как применить карту cub для инверсии сферы в Unity 3D
- 17. Как отключить бесконечную прокрутку в UIDatePicker?
- 18. Случайный объект в Unity
- 19. Сделайте скриншот КСНА для Unity/Cocos/SpritKit игр
- 20. Сделайте карту Google с помощью латинских и длинных коордов
- 21. Как инициализировать двумерную матрицу numpy
- 22. разобрать двумерную строку массива .net
- 23. Javascript создает двумерную матрицу объекта
- 24. создать бесконечную анимацию в tween.js
- 25. Остановить бесконечную анимацию в preloader
- 26. Решите бесконечную рекурсию в C#
- 27. начал бесконечную процедуру в PHPMyAdmin
- 28. backtrace() попадает в бесконечную рекурсию?
- 29. Создайте бесконечную последовательность в Elixir
- 30. Как создать простую двумерную телепортацию?
Звучит как план, но если я оставлю персонажа неподвижным и двигаю сцену, довольно скоро сцена пройдет мимо камеры, а затем вы будете смотреть в пустоту. Итак, как сделать бесконечно длинную сцену? –
Вы можете постоянно генерировать более «сцену». Я сделал бесконечную карту, где я сделал кучу сборных и постоянно создавал больше из них, когда одна часть сцены двигалась слишком далеко. Я также создал сценарий, который уничтожал бы «старую» сцену каждый раз, когда она двигалась слишком далеко от персонажа. Разделите свою сцену на части и создайте экземпляр каждого раза, когда вы уничтожаете/деактивируете его, и вы можете воспроизвести бесконечную сцену. – Lairinus
Звучит здорово! Не могли бы вы поделиться немного кода? Я очень новичок в написании сценариев, я едва сделал свой счетчик очков –