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