Как назначить многопользовательские объекты GameObject в один для Unity? - PullRequest
0 голосов
/ 17 апреля 2020

По сути, у меня есть игра, в которой игрок прыгает с грузовика на другой грузовик, и я хочу сбросить свое положение грузовика, когда игрок умирает, чтобы он мог перезапустить уровень. Некоторые из не относящихся к делу кодов, таких как движение игрока, я удалил, так как мне не нужно их включать. Код выглядит примерно так:

using System;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    Vector3 truckStart;
    Vector3 startPoint;

    //Assingables
    public GameObject Truck;
    public GameObject Player;
    public GameObject Spawn;
    public GameObject lava;


    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
        startPoint = Spawn.transform.position;
        truckStart = Truck.transform.position;
    }

    private void OnCollisionEnter(Collision collisionInfo)
    {
        if (collisionInfo.collider.gameObject == lava)
        {
            Player.transform.position = Spawn.transform.position;
            Truck.transform.position = truckStart;
        }
    }

Как сделать мой код таким образом, чтобы вместо одного игрового объекта для моего грузовика их было несколько? Я пытался использовать теги для поиска игровых объектов, но когда я это сделаю, он не позволит мне сбросить их позиции.

1 Ответ

0 голосов
/ 17 апреля 2020

Не уверен, что вы хотите, но, кажется, это не так сложно. Поскольку вы уже знаете, как назначать сериализуемые значения в Unity с помощью инспектора, просто объявите массив Truck, например:

private Vector3[] truckStartPoints;

public GameObject[] Trucks;

И, как общий совет по кодированию Unity, следующее лучше (если вы не должен получить к нему доступ из другого класса):

[SerializeField]
private GameObject[] trucks;

Это делает trucks недоступным из другого кода, но все же может быть сериализовано через инспектор.

И инициализироваться следующим образом:

private void Start()
{
    truckStartPoints = new Vector3[trucks.Length];
    for (int i = 0; i < trucks.Length; i++)
        truckStartPoints[i] = trucks[i].transform.position;
}

И сбросить так:

private void OnCollisionEnter(Collision collisionInfo)
{
    if (collisionInfo.collider.gameObject == lava)
    {
        Player.transform.position = Spawn.transform.position;
        for (int i = 0; i < trucks.Length; i++)
            trucks[i].transform.position = truckStartPoints[i];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...