飞扬的小鸟

来源:互联网 发布:java运行库32位 编辑:程序博客网 时间:2024/05/01 11:41

飞扬的小鸟:

先制作管子  先创建一个平面PLANE,把管子图片导入到assess中,在创建一个材质球,属性设置为透明并且diffuse,然后把图片拖给材质球,然后把材质球给plane调整好大小,然后在复制一个给其子集,调整好两者之间的距离,这样就做好了预制件,拖到assess,创建一个GameObject命名Runing,把照相机restruning,然后给管子写制作代码及其移动的代码。

制作代码:

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

 

public class Pipel : MonoBehaviour {

 

    public Transform prefab;预制件

    public Vector3 startPosition;初始位置

    Vector3 nextPosition;下一个位置

    Vector3 lastPosition;

 

    Queue<Transform> queuePie;队列

    public int queueLength;队列长度

 

 

    public float minX;

    public float maxX;

 

    public float minY;

    public float maxY;

 

    public float sY;

    public float xY;

 

    public float offSet;

    public static float midOffSet;

 

// Use this for initialization

void Start () {

        midOffSet = offSet;

        queuePie = new Queue<Transform>(queueLength);

        for (int i = 0; i < queueLength; i++)

        {

            queuePie.Enqueue((Transform)GameObject.Instantiate(prefab));

        }

        nextPosition = startPosition;

        lastPosition = startPosition;

        for (int i = 0; i < queueLength; i++)

        {

            Sereng();

        }

}

 

    private  void Sereng()

    {

        float x = Random.Range(minX,maxX);

        int isUp = Random.Range(1, 3);

        float y=Random.Range(minY,maxY);

        Transform o = queuePie.Dequeue();

        Vector3 midPosition = nextPosition;

        midPosition.x += o.localScale.x / 2;

        if (isUp== 1)

        {

            midPosition.y += y;

        }

        if (isUp == 2)

        {

            midPosition.y -= y;

        }

        if (midPosition.y >= sY+startPosition.y)

        {

            midPosition.y -=2* y;

        }

        if (midPosition.y <= xY+startPosition.y)

        {

            midPosition.y += 2 * y;

        }

        o.localPosition = midPosition;

        nextPosition.x += o.localScale.x+x;

        nextPosition.y = o.localPosition.y;

 

        queuePie.Enqueue(o);

    }

// Update is called once per frame

void Update () {

        Vector3 mid;

        if (MainCamera.distance - queuePie.Peek().localPosition.x >= offSet)

        {

            for (int i = 0; i < queueLength;i++ )

            {

                Transform o= queuePie.Dequeue();

                if (i == queueLength - 1)

                {

                    mid = o.localPosition;

                    nextPosition.x = mid.x + o.localScale.x / 2 + Random.Range(minX, maxX);

                }

                queuePie.Enqueue(o);

            }

                Sereng();

        }

}

}

移动代码:

using UnityEngine;

using System.Collections;

 

public class PipelMove : MonoBehaviour {

 

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

        

        transform.Translate(Time.deltaTime * -5f, 0, 0);

   

}

}

制作背景图片:创建一个PLANE,制作预制件,把云调整好位置,形成预制件,给背景图片写代码:

产生代码:

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

 

public class CloudMade : MonoBehaviour {

 

    public Transform cloud;

 

    public Vector3 cloudScal;

 

    public Vector3 startPosition;

    Vector3 nextPosition;

 

    Queue<Transform> queueCloud;

    public int queueLength;

 

// Use this for initialization

void Start () {

        queueCloud = new Queue<Transform>(queueLength);

        for (int i = 0; i < queueLength; i++)

        {

            queueCloud.Enqueue((Transform)GameObject.Instantiate(cloud));

        }

        nextPosition = startPosition;

        for (int i = 0; i < queueLength; i++)

        {

            Sereng();

        }

}

 

    private void Sereng()

    {

        Transform o = queueCloud.Dequeue();

        o.localScale = cloudScal;

        Vector3 midPosition = nextPosition;

        midPosition.x += o.localScale.x / 2;

        o.position = nextPosition;

        nextPosition.x += o.localScale.x;

        queueCloud.Enqueue(o);

    }

// Update is called once per frame

void Update () {

 

        Vector3 mid;

        if (MainCamera.distance - queueCloud.Peek().localPosition.x >= Pipel.midOffSet)

        {

            for (int i = 0; i < queueLength; i++)

            {

                Transform o = queueCloud.Dequeue();

                if (i == queueLength - 1)

                {

                    mid = o.localPosition;

                    nextPosition.x = mid.x + o.localScale.x / 2;

                }

                queueCloud.Enqueue(o);

            }

            Sereng();

        }

}

}

 

 

移动代码

using UnityEngine;

using System.Collections;

 

public class CloudMove : MonoBehaviour {

 

    

 

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

        transform.Translate(Time.deltaTime * -5f, 0, 0);

        

}

}

草地和云一样的

产生代码

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

 

public class Land : MonoBehaviour {

 

    public Transform land;

 

    public Vector3 landScal;

 

    public Vector3 startPosition;

    Vector3 nextPosition;

 

    Queue<Transform> queueLand;

    public int queueLength;

 

// Use this for initialization

void Start () {

 

        queueLand = new Queue<Transform>(queueLength);

        for (int i = 0; i < queueLength; i++)

        {

            queueLand.Enqueue((Transform)GameObject.Instantiate(land));

        }

        nextPosition = startPosition;

        for (int i = 0; i < queueLength; i++)

        {

            Sereng();

        }

}

 

    private void Sereng()

    {

        Transform o = queueLand.Dequeue();

        o.localScale = landScal;

        Vector3 midPosition = nextPosition;

        midPosition.x += o.localScale.x / 2;

        o.position = nextPosition;

        nextPosition.x += o.localScale.x;

        queueLand.Enqueue(o);

    }

// Update is called once per frame

void Update () {

 

        Vector3 mid;

        if (MainCamera.distance - queueLand.Peek().localPosition.x >= Pipel.midOffSet)

        {

            for (int i = 0; i < queueLength; i++)

            {

                Transform o = queueLand.Dequeue();

                if (i == queueLength - 1)

                {

                    mid = o.localPosition;

                    nextPosition.x = mid.x + o.localScale.x / 2;

                }

                queueLand.Enqueue(o);

            }

            Sereng();

        }

        

}

}

 

 

移动代码

using UnityEngine;

using System.Collections;

 

public class LandMove : MonoBehaviour {

 

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

        transform.Translate(Time.deltaTime *-5f, 0, 0);

}

}

 

 

 

 

0 0