先创建一个manager,然后在managr子文件下建立两个cube,一个设置skylineclosemanager,一个设置skylinefarwaymanager,在外边创建一个cube把摄像机rest,然后拉到cube中,摄像机的Scale设置在20-30最为合适
在assess中创建一个材质球设置近景颜色,比较亮色,把材质球拖到skylineclosemanager中,然后拉下来创建预制件,然后设置另一个预制件。
创建脚本skyclosescript
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SkylineCloseScript : MonoBehaviour
{
public Transform prefab;
public Vector3 startPosition;
Vector3 nextPosition;
public int GameObjectsNumber;
Queue<Transform> queueObjects;
public Vector3 minSize;
public Vector3 maxSize;
public float offSet;
void Start()
{
queueObjects = new Queue<Transform>(GameObjectsNumber);
for (int i = 0; i < GameObjectsNumber; i++)
{
queueObjects.Enqueue((Transform)GameObject.Instantiate(prefab));
}
nextPosition = startPosition;
for (int i = 0; i < GameObjectsNumber; i++)
{
Recycle();
}
}
void Update()
{
if (RunnerScript.distance - queueObjects.Peek().position.x >= offSet)
{
Recycle();
}
}
private void Recycle()
{
Vector3 scale = new Vector3(Random.Range(minSize.x, maxSize.x), Random.Range(minSize.y, maxSize.y), Random.Range(minSize.z, maxSize.z));
Transform o = queueObjects.Dequeue();
Vector3 position = nextPosition;
position.x += scale.x * 0.5f;
position.y += scale.y * 0.5f;
o.localScale = scale;
o.position = position;
nextPosition.x += scale.x;
queueObjects.Enqueue(o);
}
}
把脚本拖到skylineclosemanager和skylinefarwaymanager中,把预制件分别拖到prefab中。
创建一个Runner,创建一个脚本RunScript
using UnityEngine;
using System.Collections;
public class RunnerScript : MonoBehaviour
{
public static float distance;Vector3.Distance(a,b)
is the same as (a-b).magnitude
void Update()
{
transform.Translate(5f * Time.deltaTime, 0, 0);Time.deltaTime代表上次更新与这次更新之间的时间间隔
distance = transform.position.x;
}
}
把cube拖到Runner中。
设置close参数minsizxe x10,y20,z10
Maxsize x30,y50,z10 offset60
Farway参数minsizex20,y60,z10 offset60
Maxsize x,y,z
然后运行
Scacle 比例从两边同时放大或缩小倍数
translate 方法:相对坐标系移动
基本语法:
1 public void Translate(Vector3 translation);
2 public void Translate(Vector3 translation,Space relativeTo);
3 public void Translate(float x,float y,float z);
4 public void Translate(float x,float y,float z,Space relativeTo);
参数translation为移动向量,包括大小方向 参数relativeTo为参考坐标系空间,默认为Space.Self。
功能说明 使得GameObject对象在参数relativeTo的坐标空间中移动参数translation指定的向量。
using UnityEngine;
using System.Collections;
public class TranslateScript : MonoBehaviour {
// Use this for initialization
void Start () {
//沿Y轴旋转30度,使得transform自身坐标系和世界坐标系x轴方向不一致
transform.eulerAngles = new Vector3(0.0f,30.0f,0.0f);
//坐标位置归零
transform.position = Vector3.zero;
transform.Translate(new Vector3(10.0f,0.0f,0.0f),Space.Self);
Debug.Log("沿自身坐标系x轴移动10个距离:"+transform.position);
//坐标位置归零
transform.position = Vector3.zero;
transform.Translate(new Vector3(10.0f,0.0f,0.0f),Space.World);
Debug.Log("沿世界坐标系x轴移动10个距离:"+transform.position);
//坐标位置归零
transform.position = Vector3.zero;
transform.Translate(new Vector3(10.0f,0.0f,0.0f));
Debug.Log("沿默认坐标系x轴移动10个距离:"+transform.position);
}
// Update is called once per frame
void Update () {
}
}
这段代码中的start方法中,首先使transform沿y轴旋转30度,使得transform自身坐标系和世界坐标系x轴的方向不一致,然后调用translate方法,使transform分别沿着自身坐标系,世界坐标系和默认坐标系移动向量Vector(10.0f,0.0f,0.0f),并输出移动后的transform位置,如图
Translate:相对其他物体移动
1 public void Translate(Vector3 translation,Transform relativeTo);
2 piublic void Translate(float x,float y,float z,Transform relativeTo);
relativeTo 为参考物体
使得GameObject对象在相对relativeTo的坐标系中移动向量translation。
using UnityEngine;
using System.Collections;
public class tTranslate_2Scrip : MonoBehaviour {
public Transform relativeTo;
// Use this for initialization
void Start()
{
//将relativeTo沿y轴旋转30度,使得relativeTo自身坐标系和世界坐标系x轴方向不一致
relativeTo.eulerAngles = new Vector3(0.0f,30.0f,0.0f);
//坐标位置归零
transform.position = Vector3.zero;
transform.Translate(new Vector3(10.0f, 0.0f, 0.0f), relativeTo);
Debug.Log("沿relativeTo坐标系x轴移动10个距离:" + transform.position);
//坐标位置归零
transform.position = Vector3.zero;
transform.Translate(new Vector3(10.0f, 0.0f, 0.0f));
Debug.Log("沿默认坐标系x轴移动10个距离:" + transform.position);
}
// Update is called once per frame
void Update()
{
}
}