Unity_简易飞机大战制作(一)

这类游戏在进行时,看似地图是没有尽头的。然而实际是,游戏在一段地图上循环。下面是地图循环的几种方法。

第一种 改变地图纹理

创建一个Plane改名字为BackGround,在此游戏对象上添加一个材质球,并加上一个太空贴图,BackGround上添加一个脚本

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

public class BackGroundMove : MonoBehaviour {

    private Material m_material;
    // Use this for initialization
    void Start () 
    {
       m_material = transform.GetComponent().material;
    }

    // Update is called once per frame
    void Update () 
    {
            //改变纹理偏移量的第一种方式
            //m_material.mainTextureOffset = new Vector2(0,-Time.time);
            //改变纹理偏移量的第二种方式
            m_material.SetTextureOffset("_MainTex",new Vector3(0,-Time.time));
    }
}

第二种 让两张图片循环

让两张图片前后循环移动,要注意的是这种方法由于系统运行时的一些误差可能会导致两张图片之间几次循环后有间隔。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackGroundMove1 : MonoBehaviour {
    //背景滚动的速度
    public float speed = 2;
    //背景的尺寸
    private float backgroundSize;
    // Use this for initialization
    void Start ()
    {
        //获取背景的尺寸
        backgroundSize = transform.GetComponent().bounds.size.x;
    }
    // Update is called once per frame
    void Update () {
        //背景的移动
        transform.Translate(new Vector3(0, 0, -1) * Time.deltaTime * speed);
        //如果背景图片的位置小于(0,0,-backgroundSize) 就重置背景的位置
        if (transform.position.z <= -backgroundSize)
        {
            RepositionBackground();
        }
    }
    //重置背景的位置
    void RepositionBackground()
    {
        //计算位置的偏移量
        Vector3 groundOffset = new Vector3(0,0, backgroundSize * 2.0f);
        //在现有位置上加上偏移量
        transform.position = transform.position + groundOffset;
    }
}

第三种 让两张图片拼成一个整体共同循环

要用两块板拼成一块板,并且其中一块板作为另一块板的子物体,脚本挂在父物体身上。

using UnityEngine;
using System.Collections;

public class PlaneMove : MonoBehaviour {
    //地板
    public Transform plane;
    //背景的移动速度
    public float speed;
    //用来记录初始位置
    public Vector3 plane1StartPosition;
    float planeSize;
    // Use this for initialization
    void Start () {
        //记录下背景初始的位置
        plane1StartPosition = plane.position;    
        //获得地板的z轴的尺寸  
        planeSize = plane.GetComponent().bounds.size.z
    }
    // Update is called once per frame
    void Update () {
        //让背景进行移动
        transform.Translate(Vector3.back*Time.deltaTime*speed,Space.World);
        //当背景移动的距离大于或等于地板的尺寸时,直接把背景移回原位
        if (transform.position.z<= plane1StartPosition.z-planeSize)
        {
            transform.position = plane1StartPosition;
        }      
    }
}

地图循环效果如下

你可能感兴趣的:(unity)