Unity游戏无限道路延伸

参考文章https://blog.csdn.net/subsystemp/article/details/36433745

一、场景

一、建两块场景

在Hierarchy中:
新建两个3D Object->Plane,分别命名为bg1 , bg2
bg1的Position为0,0,0;Scale为1,1,2
bg1的Position为0,0,20;Scale为1,1,2
这两个坐标主要是让这俩道路拼接起来
在Project中:
Create新建两个Material,分别命名为Red,Yellow.
并填充颜色,分别给bg1,bg2
在这里插入图片描述

二、建物体移动

在Hierarchy中:
新建两个3D Object->Cube,并在下面创建Camera跟随物体移动,添加RigidBody刚体,和PlayControl的C# 物体移动程序
在这里插入图片描述
PlayControl代码如下,临时测试用
键盘上下左右键控制物体移动

using UnityEngine;
using System.Collections;
 
public class PlayControl : MonoBehaviour
{
    public float movespeed =10f;
    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.forward * movespeed*Time.deltaTime);
 
        if (Input.GetKey(KeyCode.DownArrow))
            transform.Translate(Vector3.back * movespeed * Time.deltaTime);
 
        if (Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * movespeed * Time.deltaTime);
 
        if (Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * movespeed * Time.deltaTime);
    }
}

为立方体Cube添加名为“Player”的tag,并且添加刚体
在这里插入图片描述

二、场景拼接(重点)

Unity菜单- GameObject-Create Empty ,改名为trag1,
坐标设置为 0 3.5 15
缩放设置为 1 1 0.2
为其添加 Box Collider
Size 设置为 10 7 1
Is Trigger 打上勾
把2个触发器分别作为bg1 bg2 的子项
所有一切就是为了player经过这个触发器时响应bg1 bg2 动态自我复制而实现循环。
在这里插入图片描述
新增两个Tag, 为平面bg1和平面bg2分别添加名为bg1、bg2的Tag
在这里插入图片描述
把下面新添加的c#脚本Bgtrigger1、Bgtrigger2分别给trag1和trag2
(感觉只有else里面的代码有用 )

using UnityEngine;
using System.Collections;

public class Bgtrigger1 : MonoBehaviour
{
    GameObject bg;

    void Start()
    {
        bg = new GameObject();
    }

    void OnTriggerEnter(Collider e)
    {
        if (e.CompareTag("Player"))
        {
            if (gameObject.transform.parent.CompareTag("bg1"))//父类
            {
                bg = GameObject.Find("bg2");
                bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 20);
            }
            else
            {
                bg = GameObject.Find("bg1");
                bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 20);
            }
        }
    }
}
using UnityEngine;
using System.Collections;

public class Bgtrigger2 : MonoBehaviour
{
    GameObject bg;

    void Start()
    {
        bg = new GameObject();
    }

    void OnTriggerEnter(Collider e)
    {
        if (e.CompareTag("Player"))
        {
            if (gameObject.transform.parent.CompareTag("bg2"))//父类
            {
                bg = GameObject.Find("bg1");
                bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 20);
            }
            else
            {
                bg = GameObject.Find("bg2");
                bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 20);
            }
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46316338/article/details/107895215