内容纲要

1.创建地面

1.创建一个Plane更名为Ground
2.新建一个Material

2.创建小球

1.创建一个Sphere更名为Ball
2.新建一个Material
3.添加一个Rigibody刚体组件

3.控制小球运动

1.添加脚本PlayerCtrl控制小球运动

public class PlayerCtrl : MonoBehaviour {

    public float moveForce;
    public float jumpForce;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void FixedUpdate () {
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            GetComponent<Rigidbody>().AddForce(-moveForce*Time.fixedDeltaTime, 0,0);
        }

        if(Input.GetKey(KeyCode.RightArrow))
        {
            GetComponent<Rigidbody>().AddForce(moveForce * Time.fixedDeltaTime, 0, 0);
        }

        if(Input.GetKey(KeyCode.UpArrow))
        {
            GetComponent<Rigidbody>().AddForce(0, 0, moveForce * Time.fixedDeltaTime);//前
        }

        if (Input.GetKey(KeyCode.DownArrow))
        {
            GetComponent<Rigidbody>().AddForce(0, 0, -moveForce * Time.fixedDeltaTime);
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            GetComponent<Rigidbody>().AddForce(0, jumpForce * Time.fixedDeltaTime, 0);

        }
    }
}

2.给小球施加一个弹力:Assets-Create-Physic Material

Roll a ball插图

4.摄像机跟随小球移动

偏移量=相机位置-小球位置
相机的新位置=小球位置+偏移量

public class CameraCtrl : MonoBehaviour {
    private Vector3 offset;//记录小球到摄像机的偏移值

    public Transform player;

    void Start () {
        offset = this.transform.position - player.position;
    }

    void Update () {
        //刷新摄像机的位置,使其跟踪小球的位置
        this.transform.position = player.position + offset;
    }
}

5.设置边界

创建一个空的GameObject作为父节点,添加四个Cube调整位置作为四周墙壁,使小球在运动过程中不越界

6.创建立方体道具

创建道具,使其随机旋转,并创建其预制体

        float r = Random.Range(-15, 45);
        Vector3 rot = new Vector3(r, r, r);
        rot = rot * Time.deltaTime;
        transform.Rotate(rot);

7.收集立方体

收集立方体:球与立方体碰撞时要能检测到并且发生碰撞时立方体消失或隐藏,但是要进行碰撞过滤,与地面墙壁碰撞时不消失

public void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Pickup")
        {
            other.gameObject.SetActive(false);

        }

    }

8.显示得分和文字

    private int score = 0;

    public Text scoreText;
    public Text winText;

    public void AddScore(int score)
    {
        this.score += score;
        scoreText.text = string.Format("Score:{0}", this.score);
        if(this.score==12)
        {
            winText.gameObject.SetActive(true);
        }
    }

public void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Pickup")
        {
            AddScore(1);
            other.gameObject.SetActive(false);//禁用整个对象
            //other.enabled = true;//禁用text组件
        }

    }

9.效果预览

Roll a ball插图(1)

发表评论