Unity 场景循环策略
情况一:小车一直行驶在平直的路面,需要地图依次循环,当小车快要行驶出第一张地图时候加载第二张,依次循环。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoopScene : MonoBehaviour
{
const float width = 150f;//这里是平面的宽度
public Transform player;//玩家或者小车
public float movespeed = 100;
Vector3 initPos;
void Start()
{
initPos = transform.position;
}
void Update()
{
float totalWidth = width * 2f;// * backGroundNum;
float distZ = player.position.x - initPos.x - 100;//实时计算玩家与插入点的距理
int n = Mathf.RoundToInt(distZ / totalWidth);//四舍五入一下
var pos = initPos;
pos.x += n * totalWidth;
transform.position = pos;
}
}
情况二:小车或者玩家不动,场景循环,视觉上感觉小车在动。这种情况方法很多,比如一直在下一次位置克隆地图,一段时间销毁。或者就是两个地图连续循环。理解重点在于玩家或者车不动。循环坐标范围不会太大;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SceneLoop : MonoBehaviour
{
private float mSpeed = 20.0F;
private GameObject scene1;
private GameObject scene2;
void Start()
{
scene2 = GameObject.Find("2");
scene1 = GameObject.Find("1");
}
void Update()
{
scene2.transform.Translate(Vector3.right * Time.deltaTime * mSpeed);
scene1.transform.Translate(Vector3.right * Time.deltaTime * mSpeed);
if (scene1.transform.localPosition.x >= 300F)
{
scene1.transform.localPosition = new Vector3(scene2.transform.localPosition.x - 140f, scene1.transform.localPosition.y, scene1.transform.localPosition.z);
}
else if (scene2.transform.localPosition.x >= 280F)
{
scene2.transform.localPosition = new Vector3(scene1.transform.localPosition.x - 140f, scene2.transform.localPosition.y, scene2.transform.localPosition.z);
}
}
}