Einheit – die Verwirklichung der automatischen Zerstörung des Objekts, wenn es sich an einen bestimmten Ort bewegt && das Objekt wird an einem bestimmten Punkt unendlich erzeugt

Das Objekt bewegt sich an einen bestimmten Ort und wird automatisch zerstört

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

public class MoveForward : MonoBehaviour
{
    
    
    //向前运动的物体的基本速度
    public float speed;
    //记录起始坐标
    private Vector2 startPos;

    void Start()
    {
    
    
        startPos = transform.position;
    }

    void Update()
    {
    
    
        //距离超过10 自动销毁
        if(Mathf.Abs(transform.position.x - startPos.x) > 20){
    
    
            Destroy(this.gameObject);
        }
        Move();
    }

    //让车一直移动的函数
    private void Move(){
    
    
        transform.position += transform.right * speed * Time.deltaTime;
    }
}

Objekt spawnt unendlich an einem bestimmten Punkt

Idee: Es ist relativ einfach, einen leeren Koordinatenpunkt zu erstellen, dann eine Liste zum Skript hinzuzufügen, die zu generierenden Elemente darin abzulegen und dann die von Unity geschriebene Funktion zu verwenden, um in regelmäßigen Abständen zufällig zu generieren.

Zu
verwendende Schlüsselfunktionen

// 在某个位置生成对象的函数,这是要用到的它的某一个重载
Instantiate((生成什么, 生成位置, 是否旋转, 父级位置));
//随机函数[first, last)
Random.Range(first, last)
//每一段时间循环函数
InvokeRepeating(循环对象的名称, 游戏开始后多久开始循环, 每多少秒执行一次);

Erstellen Sie einen leeren Spawnpunkt

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-eYLLBTgQ-1679891331702) (C:/Users/86188/AppData/Roaming/Typora/ typora-user-images/ image-20230327105120385.png)]

Machen Sie ein paar Gegenstände, die wir zufällig generieren möchten:

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite hat möglicherweise einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-8M3TpTrq-1679891331703) (C:/Users/86188/AppData/Roaming/Typora/ typora-user-images/ image-20230327111458863.png)]

Ich habe hier drei Autos, und sie bewegen sich standardmäßig mit unterschiedlichen Geschwindigkeiten vorwärts.

schreibe zufällig generierte Skripte

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

public class Spawner : MonoBehaviour
{
    
    
    //存想无限生成的东西
    public List<GameObject> spawnObjects;

    void Start()
    {
    
    
        //循环函数
        InvokeRepeating(nameof(Spawn), 0.2f, Random.Range(5f, 10f));
    }

    private void Spawn() {
    
    
        //随机我们指定的一堆物品的一个数 (随机[0, 数组长度)
        int index = Random.Range(0, spawnObjects.Count);
        //unity准备的随机生成函数 (生成什么,生成位置,是否旋转,父级位置)
        Instantiate(spawnObjects[index], transform.position, Quaternion.identity, transform);

    }
}

Dann fügen wir das, was wir generieren möchten, in das leere Objekt ein, das wir erstellt haben.

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite hat möglicherweise einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-DtpIjeFJ-1679891331704)(C:/Users/86188/AppData/Roaming/Typora/ typora-user-images/ image-20230327115918550.png)]

DLC: Drehen Sie das Auto, das am roten Geburtspunkt unten geboren wurde, in die entgegengesetzte Richtung

Idee: Wir setzen einen Richtungsparameter auf den Geburtspunkt, um zu sagen, ob das Autoobjekt umgedreht ist, und das Auto muss dies verwenden, um die Richtung zu beurteilen und die Geschwindigkeit in die entsprechende Richtung anzugeben.

Schauen wir uns das Skript des sich bewegenden Objekts an:

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

public class MoveForward : MonoBehaviour
{
    
    
    //向前运动的物体的基本速度
    public float speed;
    //记录起始坐标
    private Vector2 startPos;
    //小车跑的方向
    public int dir;  //重点

    void Start()
    {
    
    
        startPos = transform.position;
        //动画是否翻转
        transform.localScale = new Vector3(dir, 1, 1);  //重点
    }

    void Update()
    {
    
    
        //距离超过10 自动销毁
        if(Mathf.Abs(transform.position.x - startPos.x) > 20){
    
    
            Destroy(this.gameObject);
        }
        Move();
    }

    //让车一直移动的函数
    private void Move(){
    
    
        transform.position += transform.right * speed * Time.deltaTime * dir;   //重点
    }
}

Ändern wir noch einmal den Geburtspunkt:

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

public class Spawner : MonoBehaviour
{
    
    
    //存想无限生成的东西
    public List<GameObject> spawnObjects;
    //控制生成方向
    public int direction;

    void Start()
    {
    
    
        //循环函数
        InvokeRepeating(nameof(Spawn), 0.2f, Random.Range(5f, 10f));
    }

    private void Spawn() {
    
    
        //随机我们指定的一堆物品的一个数 (随机[0, 数组长度)
        int index = Random.Range(0, spawnObjects.Count);
        //unity准备的随机生成函数 (生成什么,生成位置,是否旋转,父级位置)   重点
        GameObject car = Instantiate(spawnObjects[index], transform.position, Quaternion.identity, transform);
        //改变生成的汽车的运动方向 重点
        car.GetComponent<MoveForward>().dir = direction;
    }
}

Stellen Sie den Geburtspunkt, den Sie in die entgegengesetzte Richtung verschieben möchten, auf -1 und den anderen auf 1 ein;

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite hat möglicherweise einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-WiGfpY0m-1679891331705) (C:/Users/86188/AppData/Roaming/Typora/ typora-user-images/ image-20230327122557972.png)]

Beenden!

Acho que você gosta

Origin blog.csdn.net/abaidaye/article/details/129792864
Recomendado
Clasificación