Как сделать так, чтобы transform.position затрагивал более одного GameObject - PullRequest
0 голосов
/ 21 марта 2020

В настоящее время я работаю над мобильной игрой.

Я кодировал transform.postion для использования Mathf.PingPong, поэтому, когда изображение достигает края экрана, оно отскакивает и продолжает работать .

Тем не менее, я получил его на работу, я хочу, чтобы 20 GameObjects делали одно и то же, но в разных позициях без 20 сценариев.

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;


public class PingPongEffect : MonoBehaviour
{

    public float speed = 9.0f;

    void Update()
    {
        transform.position = new Vector3(Mathf.PingPong(Time.time * speed, 1920), transform.position.y, transform.position.z);
        transform.position = new Vector3(transform.position.x, Mathf.PingPong(Time.time * speed, 1080), transform.position.z);
    }

}

Вот видео для справки https://youtu.be/_e15PaijQi0

1 Ответ

0 голосов
/ 21 марта 2020

Transform.Position может одновременно манипулировать только одним игровым объектом, если только вы не группируете другие объекты под этим Transform. Но в реальности только GameObject будет двигаться, а остальные будут двигаться только потому, что они сгруппированы в одну иерархию, поэтому из-за этого многие ваши вирусы будут go закадровыми.

Так что если бы я был вами, я бы просто вставьте те же 20 префабов на экран. Я полагаю, что вас беспокоит производительность, которая в этом случае незначительна, однако, если это странное требование, вы можете сделать это альтернативно.

Пометьте все свои объекты Virus GameObject с тегом "Вирусы" или сделайте список общедоступным c и назначьте их непосредственно из редактора, затем используйте скрипт ниже

public class PingPongEffect : MonoBehaviour
{

    public float speed = 9.0f;
    List<Transform> viruses = new List<Transform>();

    void Awake()
    {
        var virusGameObjects = GameObject.FindGameObjectsWithTag("Viruses");
        foreach(var virusGameObject in virusGameObjects)
        {
            viruses.Add(virusGameObject.transform);
        }
    } 

    void Update()
    {
        foreach(var virusTransform in viruses)
        {
            virusTransform.position = new Vector3(Mathf.PingPong(Time.time * speed, 1920),
                virusTransform.position.y, virusTransform .position.z);
            virusTransform.position = new Vector3(virusTransform .position.x, 
                Mathf.PingPong(Time.time * speed, 1080), virusTransform .position.z);
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...