笔记

学习笔记

第一步 我们先把场景搭好,同时准备好游戏中的物体:玩家,子弹,方块,墙。
这里写图片描述

这就是我们的场景了。
这里写图片描述

这就当作是我们的子弹了。
第二步 我们写脚本控制玩家移动,同时要控制玩家移动范围:只能左右移动,且不超出墙。

public class PlayerMove : MonoBehaviour {

    float h;
    public Transform left;
    public Transform right;

    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {      
        h = Input.GetAxis("Horizontal");
        transform.Translate(transform.right * h * 5 * Time.deltaTime);
    }
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.name == "Left")
        {
            transform.position = new Vector3(transform.position.x + 1f, transform.position.y, transform.position.z);
        }
        if (collision.collider.name == "Right")
        {
            transform.position = new Vector3(transform.position.x -1f, transform.position.y, transform.position.z);
        }
    }
}

第三步 我们写子弹的发射脚本:向上发射,同时要控制摧毁子弹如果碰到物体后以及自然消失,并且如果子弹击中了方块,我们要统计击中的次数。

public class Fire : MonoBehaviour {

    public GameObject player;
    public GameObject shell;

    Vector3 shellPos;


    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame

    void Update() {

        shellPos = new Vector3(player.transform.position.x,player.transform.position.y+0.2f,player.transform.position.z);      
        if (Input.GetMouseButtonDown(0))
        {   
            Instantiate(shell, shellPos, player.transform.rotation);
        }
    }  
}
public class Shell : MonoBehaviour
{

    public Rigidbody shellRid;
    [HideInInspector]
    public static int count = 0;

    [Range(1, 10f)]
    public int speed = 5;

    // Use this for initialization
    void Start()
    {
        StartCoroutine(destroy());
    }

    // Update is called once per frame
    void Update()
    {
        shellRid.velocity = transform.up * speed;
    }
    IEnumerator destroy()
    {
        yield return new WaitForSeconds(1.5f);
        Destroy(gameObject);
    }
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.name == "Cube")
        {
            Destroy(gameObject);
            count++;
            //Debug.Log(count);
        }
        Destroy(gameObject, 0.01f);
    }
}

第四步 我们把方块的刚体加上,同时要使用重力,还要使z值相同,落下去后要复位。

public class EqualPosZ : MonoBehaviour {
    public Transform player;

    Vector3 pos;
    // Use this for initialization
    void Start()
    {
        pos = player.position;
        transform.position = new Vector3(transform.position.x, transform.position.y, pos.z);
    }
}
public class Reset : MonoBehaviour {

    Vector3 oldPos;
    Quaternion rota;

    public GameObject cube;
    public Transform player;
    public Rigidbody rid;

    // Use this for initialization
    void Start()
    {
        oldPos = cube.transform.position;
        rota = cube.transform.rotation;
    }

    // Update is called once per frame
    void Update()
    {
        if (Vector3.Distance(gameObject.transform.position, player.position) > 20f)
        {
            cube.transform.position = oldPos;
            cube.transform.rotation = rota;
            rid.velocity = new Vector3(0, 0, 0);
        }   
    }
}

第五步 我们把ui显示脚本写上,显示击中次数,倒计时(倒计时到游戏结束),以及得分。

public class UI : MonoBehaviour {

    public Text countText;
    public Text scoreText;
    public Text timeText;

    [Range(60, 90)]
    public int totalTime = 60;

    int oldTime;
    // Use this for initialization
    void Start () {
        StartCoroutine(time());
        oldTime = totalTime;
    }

    // Update is called once per frame
    void Update () {
        countText.text = "击中目标" + Shell.count.ToString() + "次";
        scoreText.text = "现在得分为" + Shell.count * (oldTime - totalTime);
        timeText.text = totalTime.ToString();

    }
    IEnumerator time()
    {
        while (totalTime > 0) {
        yield return new WaitForSeconds(1f);
        totalTime--;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值