初学unity(简单场景制作)

首先,新建立一个空白场景(纯英文路径)。
加入一个空的游戏物体,在其子目录创建两个子物体,取名Close和Far(利用这两个做游戏背景),将这两个游戏体拖入下方Assets中,作为预置体,补充相应的材质球来做出想要的颜色,然后添加一个C#脚本(命名为House)。
这里写图片描述
在Assets中,新建一个文件夹Runner作为移动的视角,添加一个C#脚本(命名为Run)。
这里写图片描述
这里写图片描述
打开House,编写代码

using UnityEngine;
using System.Collections;
using System.Collections.Generic;//为了使用Queue

public class House : MonoBehaviour {

    public Transform g;//公有,为了加入Cube
    //私有,代码内部建立,为了重复建立Cube
    Queue<Transform> queueObject;
    public int queueLength;//设置queue长度
    public Vector3 minSize;//设置物体最小体积
    public Vector3 maxSize;//设置物体最大体积
    public Vector3 startPosition;//设置开始坐标
    Vector3 nextPosition;//下一个物体的坐标

    public float offSet;//是否在物体后建立新物体的参考数值


    // Use this for initialization
    void Start () {
        //初始化
        queueObject = new Queue<Transform>(queueLength);
        //将Cube循环加入到queue
        for (int i = 0; i < queueLength; i++)
        {
            queueObject.Enqueue((Transform)GameObject.Instantiate(g));
        }
        //将初始数值付给下一步数值
        nextPosition = startPosition;
        for (int i = 0; i < queueLength; i++)
        {
            Resever();
        }

    }

    private void Resever()
    {
    //取出queue的物体对其设置
        Transform o = queueObject.Dequeue();
        //通过随机数设置坐标
        o.localScale = new Vector3(Random.Range(minSize.x,maxSize.x),Random.Range(minSize.y,maxSize.y),Random.Range(minSize.x,maxSize.z));
        //中间变量
        Vector3 mid = nextPosition;
        //取x方向一半大小将其累加在mid中
        mid.x += o.localScale.x / 2;
        //使物体在同一水平面
        mid.y += o.localScale.y / 2;
        //物体坐标初始化
        o.localPosition = mid;
        //将物体的在x方向的大小累加在nextPosition的x上上
        nextPosition.x += o.localScale.x;
        //将其加入到queue的末尾
        queueObject.Enqueue(o);
    }

    // Update is called once per frame
    void Update () {
    //比较其数值大小,是否新建立后边的场景
        if (Run.dis - queueObject.Peek().localPosition.x >= offSet)
        {
            Resever();
        }
    }
}

下边是Run的代码

//定义静态值,不会再unity界面显示
  public static float dis;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
         //设置移动速度
        transform.Translate(5f * Time.deltaTime, 0, 0);
        //将视角坐标赋给dis
        dis = transform.position.x;
    }

然后将Close物体拖入到脚本中,并设置相应的参数
这里写图片描述
通过

  if (Run.dis - queueObject.Peek().localPosition.x >= offSet)

可以比较视角与边界(出现在视角中较长时间)的物体移动到新的位置,即可创立出一种新的,类似于无限出现在视角中的“假象”。
最终成像
这里写图片描述
其中,随着视角的移动,物体会不停的显示,造成“无尽背景的显示”

备注:
1.创立脚本时立即更改名字,当确定后在更改名字,要将脚本中的声明一同更改。
2.拖预置件到脚本的公用变量时,若后边更改了该变量,要重新拖预制件到脚本当中
3.Localposition和Position的区别:
Position:在unity世界中的坐标
Localposition:子物体相对于父物体的坐标,若没有父物体,则默认以unity世界作为父物体

欢迎关注我的微信个人订阅号
这里写图片描述
每天多学一点0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值