Почему это преобразование установлено в этом сценарии Unity? - PullRequest
0 голосов
/ 30 декабря 2018

Я следовал этому замечательному учебнику:

https://www.youtube.com/watch?v=uxrKE2VKvmc

и в какой-то момент он делает это для каждой цели, он создает gameObject?

Если выпосмотрите на код здесь:

private void SetupTargets(List<TrackableBehaviour> allTargets)
    {
        Debug.Log("Listing all Targets names:");

        foreach (TrackableBehaviour target in allTargets)
        {
            Debug.Log("Target's name:" + target.TrackableName);

            target.gameObject.transform.parent = transform;
            target.gameObject.name = target.TrackableName;

            target.gameObject.AddComponent<PlaneManager>();

            Debug.Log(target.TrackableName + " created!");
        }
    }

почему эта строка кода?

target.gameObject.transform.parent = transform;

Если я закомментирую его, он все равно будет работать хорошо.

Полный класскод ниже:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
using System.Linq;

public class TargetManager : MonoBehaviour
{

    public String mStartingMarkerDatabaseName = "";

    private List<TrackableBehaviour> mAllTargets = new List<TrackableBehaviour>();

    private void Awake()
    {
        VuforiaARController.Instance.RegisterVuforiaStartedCallback(onVuforiaStarted);
    }

    private void onDestroy()
    {
        VuforiaARController.Instance.UnregisterVuforiaStartedCallback(onVuforiaStarted);
    }

    private void onVuforiaStarted()
    {
        LoadDatabase(mStartingMarkerDatabaseName);
        mAllTargets = GetTargets();
        SetupTargets(mAllTargets);
    }

    private void LoadDatabase(string name)
    {
        ObjectTracker objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
        objectTracker.Stop();

        if (DataSet.Exists(name))
        {
            DataSet dataSet = objectTracker.CreateDataSet();
            dataSet.Load(name);
            objectTracker.ActivateDataSet(dataSet);
        }

        objectTracker.Start();
    }

    private List<TrackableBehaviour> GetTargets()
    {
        List<TrackableBehaviour> allTrackables = new List<TrackableBehaviour>();

        allTrackables = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours().ToList();

        return allTrackables;
    }

    private void SetupTargets(List<TrackableBehaviour> allTargets)
    {
        Debug.Log("Listing all Targets names:");

        foreach (TrackableBehaviour target in allTargets)
        {
            Debug.Log("Target's name:" + target.TrackableName);

            target.gameObject.transform.parent = transform; 
            target.gameObject.name = target.TrackableName;

            target.gameObject.AddComponent<PlaneManager>();

            Debug.Log(target.TrackableName + " created!");
        }
    }
}

1 Ответ

0 голосов
/ 30 декабря 2018
target.gameObject.transform.parent = transform;

Этот код означает, что целевой gameObject будет дочерним по отношению к любому объекту gameObject, к которому присоединен скрипт TargetManager.

Как указано в комментариях derHugo, он является избыточным и может быть просто записан как

target.transform.parent = transform;
...