Unity3d 无限道路生成

目录

场景搭建

代码实现


注:物体命名中注意不要有空格,不然可能会产生自己很难找的问题。

场景搭建

1.新建两个Plane

Plane(1)设置位置如图,使两个Plane拼接起来

可以在Project面板右击Create->Material 创建新的材质,选择颜色,然后将此Material(blue或者red)托给任意Plane即可为其上色

箭头所指为颜色选择器

 

最终结果如下

2.新建一个cube,为我们控制的物体(玩家)

将Main Camera放到cube下,调整相机视角如图(方便我们的观察)

 点击cube,然后在Inspector点击Add Component,在Physics中选择添加Rigidbody,为cube添加刚体。

 3.添加道路循环生成触发器

新建一个名为loop的空物体(在Hierarchy面板右击->Create Empty),并为其添加Box Collider属性进行碰撞检测,各项属性设置如图:

将 loop 复制一份并分别放到两个Plane下,如图

 代码实现

1.cude移动代码

新建一个名为 PlayControl 的c#文件如图,并将此文件托给cube物体,以实现控制cube的移动,将cube的Tag设置为Palyer:

 代码内容为:

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);
    }
}

2.道路循环实现:

新建两个C#文件,命名和代码如下:

Loop:

using UnityEngine;
using System.Collections;

public class Loop : MonoBehaviour
{

    GameObject gb;

    void Start()
    {
        gb = new GameObject();
      

    }

    void OnTriggerEnter(Collider e)
    {
        if (e.CompareTag("Player"))
        {
            if (gameObject.transform.parent.CompareTag("Plane"))
            {
                gb = GameObject.Find("Plane(1)");
                gb.transform.position = new Vector3(0, 0, gb.transform.position.z + 18);
            }

        }
    }
}

Loop1:

using UnityEngine;
using System.Collections;

public class Loop1 : MonoBehaviour
{
    GameObject gb;
    GameObject gb2;

    void Start()
    {
        gb = new GameObject();
    }
    void OnTriggerEnter(Collider e)
    {
        if (e.CompareTag("Player"))
        {
            if (gameObject.transform.parent.CompareTag("Plane(1)"))
            {
                gb = GameObject.Find("Plane");
                gb.transform.position = new Vector3(0, 0, gb.transform.position.z + 18);
            }
           
        }
    }
}

点击Tag,新建两个Tag分别为 Plane 和 Plane(1),将Plane和Palne(1)物体(两个蓝红道路)的Tag设置为对应的Plane 和 Plane(1)Tag。

添加Tag:

 设置Tag:

将两个C#文件分别托给 loop 和 loop(1)物体,用于当 cube 和两个物体碰撞时触发脚本使道路前移,实现道路循环。

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值