小球酷跑
-
场景设置
在main中新建三个cube分别设置成两个墙和player物体,把下面的效果图背景设置成深蓝色,并且把场景设置成16:10
-
小球翻滚
代码如下:
public class PlayerMove : MonoBehaviour {
public float speedAutoMove = 5;
public float speedMoveUpAndDown = 20;
public Rigidbody rd;
// Use this for initialization
void Start () {
rd = gameObject.GetComponent();
}// Update is called once per frame
void Update () {PlayerAutoMove(); PlayerMoveUpAndDown();
}
private void PlayerAutoMove()
{
rd.AddForce(Vector3.right * speedMoveUpAndDown);
}
private void PlayerMoveUpAndDown()
{
float v = Input.GetAxis(“Vertical”);
rd.AddForce(v * speedMoveUpAndDown * Vector3.up);
}
}
用 rd.AddForce (v * speedMoveUpAndDown * Vector3.up),实现键盘控制小球的上下移动。
player的script的添加。
小球的刚体设置
添加刚体rigidbody重力,小球可以跑起来
-
摄像机跟踪
设置camera要求跟着player一起跑,player和两个wall一起跑。
代码如下:
public class CameraControl : MonoBehaviour {
public GameObject player;
private float offset;
// Use this for initialization
void Start () {
offset = gameObject.transform.position.x - player.transform.position.x;
}
// Update is called once per frame
void Update () {
gameObject.transform.position = new Vector3(offset+ player.transform.position.x,
gameObject.transform.position.y, gameObject.transform.position.z);
}
}
- 柱体跟踪
通过 gameObject.transform.position = new Vector3 (player.transform.position.x + offset, 0, 0);控制两个主题跟随飞升的正方体和摄像机匀速走。
代码如下:
public class WallControl : MonoBehaviour {
private float offset;
public GameObject player;
// Use this for initialization
void Start () {
offset = gameObject.transform.position.x - player.transform.position.x;
}
void Update()
{
FollowPlayerMove();
}
// Update is called once per frame
void FollowPlayerMove () {
gameObject.transform.position = new Vector3(player.transform.position.x+offset,0,0);
}
}
- 添加颜色,障碍物设置。
在main中新建cube命名为barrier并且设置一个空域命名为BarrierControl,之后在BarrierControl中刚体添加一个C#编写代码如图下,并且在project中新建material颜色给各个物体添加颜色,通过添加了AutoCreatePlayer()障碍物自动生成,
代码如下:
public class BarrierControl : MonoBehaviour {
public int barrierInterval=5;
public GameObject player;
public GameObject CurrentBarrier;
public GameObject BarrierPre;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
AutoCreatBarrier();
}
// 障碍物自动生成
public void AutoCreatBarrier()
{
if(player.transform.position.x>CurrentBarrier.transform.position.x)
{
//生成新的障碍物
float targetX = CurrentBarrier.transform.position.x + barrierInterval;
float targetY = RandomBarrierPosition();
Vector3 targetPos = new Vector3(targetX,targetY,0);
GameObject g = Instantiate(BarrierPre,targetPos,Quaternion.identity);
//随机大小
g.transform.localScale = new Vector3(g.transform.localScale.x, RandomBarrierSize((int)g.transform.position.y), g.transform.localScale.z);
//判断障碍更换
CurrentBarrier = g;
}
}
//障碍随机大小
public float RandomBarrierSize(int r)
{
int rAbs = Mathf.Abs(r);
if(rAbs==0)
{
return 6;
}
else
{
return (3-rAbs)*2+1;
}
}
//障碍物随机位置
public float RandomBarrierPosition()
{
int r = Random.Range(-3,3);
Debug.Log(r);
return r;
}
}
- 结束效果
***The END***