内容纲要

点击屏幕调整角度,点击屏幕蓄力,再次点击投篮,每次篮筐位置重置

1.首先要搭建一个场景

如下图所显示
投篮小游戏插图
1.这种图片用黑色像素块搭建。
2.放好球的位置
在所有东西上Box Collider2D
3.Angle和Power是text的UI
4.下面做一个Ui中的退出键

2.让球动起来。

1.首先在球上加上Circle Collider2D组件。
2.加上rigidbody2D组件。使球具有物理效果
3.创建BallMove脚本;内容如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallMove : MonoBehaviour {
    public static BallMove instance;//单例;
    public float AngleMunchx=1,AngleMuchY=0;//力量方向向量x轴和y轴(起始向量x轴)
    private bool isAngle=true;//角度是否调整好
    public float PowerMuch;//力量大小
    private bool isPower;//力量是否设置完成
    private bool isbeign;//角度力量是否都设置完成
    public GameObject fuzhu;//角度辅助线对象
    void Start ()
    {
        instance = this;
    }
    void Update ()
    {
        if (GamerController.instance.isGameOver == true) return;//游戏控制器,游戏是否结束
        anterPower();
        enterAngle();
        ballMove();
    }
    void enterAngle()//点击鼠标,设置角度
    {
        if (isAngle==true)
        {
            if (Input.GetMouseButton(0))
            {
                if (AngleMuchY<1.01)//最大为90度
                {
                    AngleMuchY += 0.2f * Time.deltaTime;
                }else if (AngleMuchY>= 1&& AngleMunchx>=0)
                {
                    AngleMunchx -= 0.2f * Time.deltaTime;
                }
            }
            if (Input.GetMouseButtonUp(0))
            {
                isAngle = false;
                isPower = true;
                Debug.Log("od");
            }
        }
    }
    void anterPower()//设置力量,最大为70
    {
        if (isPower == true)
        {
            if (Input.GetMouseButton(0))
            {
                Debug.Log("add");
                if (PowerMuch<=70)
                {
                    PowerMuch += Time.deltaTime + 1;
                }
            }
            if (Input.GetMouseButtonUp(0))
            {
                isPower = false;
                isbeign = true;
            }
        }
    }
    void ballMove()//发射球体方法
    {
        if (Input.GetMouseButtonDown(0)&&isbeign== true)
        {
            fuzhu.SetActive(false);//隐藏辅助线
            this.GetComponent<Rigidbody2D>().velocity = new Vector2();//设置速度为0
            this.GetComponent<Rigidbody2D>().AddForce(new Vector2(AngleMunchx, AngleMuchY) * (PowerMuch*10));//施加设置好的力
            isbeign = false;
        }
    }
}

辅助线脚本

显示当前向量的角度

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class fuzhu : MonoBehaviour {
    public Vector2 MAngles = new Vector2(1,0);//默认向量
    public Vector2 a;
    public float angle;
    public static fuzhu instance;
    // Use this for initialization
    void Start () {
        instance = this;
    }
    void Update ()
    {
        a = new Vector2(BallMove.instance.AngleMunchx, BallMove.instance.AngleMuchY);//得到力的向量
        angle = Vector2.Angle(a,MAngles);//和默认向量对比角度
        float d = 90 - angle;
        this.gameObject.transform.rotation =  Quaternion.Euler(0,0,d);//变换辅助线角度
    }
}

3.制作篮筐

安装多个trigger,在Trigger属性性上打勾,如图
投篮小游戏插图(1)
只要在入口和出口在Trigger属性性上打勾
1.如图写出WinScence脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WinScence : MonoBehaviour {
    int WinsNummber = 0;//记录碰撞次数
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update ()
    {
        Wins();

    }

    private void OnTriggerExit2D(Collider2D collision)//碰撞器方法
    {
        WinsNummber++;
    }
    public void Wins()//碰撞两次触发
    {
        if (WinsNummber>=2)
        {
            GamerController.instance.GOtext.text = "投进了";
            GamerController.instance.isGameOver = true;
            GamerController.instance.GamerOverText.SetActive(true);
        }
    }
}

这样能实现比较真实的投篮效果

游戏控制器

显示UI信息,每局随机位置产生一个篮球框

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GamerController : MonoBehaviour {
    public static GamerController instance;
    public bool isGameOver;//游戏是否结束
    //篮筐
    public GameObject PrCallGameObject;//篮筐预制物体
    public GameObject NCall;//产生篮筐的空对象范围坐标
    private bool isCallSet = false;
    //UI组件
    public Text angleText;
    public Text powerText;
    public GameObject GamerOverText;
    public Text GOtext;
    void Awake()
    {
        instance = this;
    }
    void Start ()
    {
        if (isCallSet==false)
        {
            Vector2 a = new Vector2(NCall.transform.position.x, Random.Range(0f, 1f));//在空对象的y轴随机产生篮筐
            Instantiate(PrCallGameObject, a, Quaternion.identity);
            isCallSet = true;
        }
    }
    void Update ()
    {
        angleText.text = "angle:"+(90-fuzhu.instance.angle);//每帧显示角度
        powerText.text = "power:" + BallMove.instance.PowerMuch;//每帧显示力量
        isGamerOver();
    }
    void isGamerOver()//游戏结束后启动
    {
        if (isGameOver==true)
        {
            GamerOverText.SetActive(true);//显示游戏结束界面
            if (Input.GetMouseButtonDown(0))
            {
                Application.LoadLevel(Application.loadedLevelName);
            }
        }
    }
}

4.游戏结束

当球碰到墙壁时游戏结束,不需要OnTrigger属性。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CallinMove : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag=="ball")
        {
            GamerController.instance.isGameOver = true;
        }
    }

}

投篮小游戏插图(2)
除了底座都加上以上脚本

一些问题

1.发布的手机上UI无法固定位置

2 对 “投篮小游戏”的想法;

  1. Pingback: viagra

发表评论