新手来看看,简单小游戏,首先先看看运行界面 ,玩法是点击鼠标左键球会跳动,进篮筐后篮筐消失,然后在另一边生成,生成的高度是随机的。
一,先看看场景。
背景,篮板,上下左右都设置边界,球碰撞边界则此球出界。
1篮板设置碰撞体,由盒子型,胶囊型组成。
这里我设置了四个胶囊碰撞体在篮筐用于检测。
篮板,球杆设置盒子型碰撞体。
2.球的设置
刚体这些设置可以自己调,限制球在x轴的移动,和在y,z的转向,把写好的脚本拉过来,刚体之类的填补。
我为球添加了子物体,用于添加粒子特效,这只是简单特效,具体炫酷特效可以自己去研究
特效很简单,自己可以琢磨做更炫酷的特效。
二,接下来看源码。
ballMovement.cs源码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ballMovement : MonoBehaviour {
public float speedY = 10;// y轴速度
public Rigidbody rb;
public float speedZ = 5; //Z轴速度
public int i = 0; //设置变量检测球框位置
public float mark = 0; //分数
public int health = 5; //生命值
void Start()
{
rb = GetComponent<Rigidbody>(); //获取刚体组件
}
void Update()
{
//如果按下鼠标左键或者空格键,则给球一个力为Vector3(0, speedY, speedZ);
if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))
{
rb.velocity = new Vector3(0, speedY, speedZ);
}
//更新分数
GameObject.Find("Canvas").GetComponentInChildren<Text>().text = "分数:" + mark + "";
}
void OnTriggerEnter(Collider other)
{
//如果进球,且篮板在左边,首先加分,改变球速度z方向,然后移动球框到右边,a是移动位置y轴的随机值,同时也要把球框调转
//debug用于调试
//后设置i = 1,改变位置
if (other.gameObject.name == "goal" && i == 0 )
{
mark -= (int)rb.velocity.y;
speedZ = -speedZ;
float a = Random.Range(-13f, 1.3f);
GameObject.Find("BallFrame").transform.position = new Vector3(0, a, 15f);
GameObject.Find("BallFrame").transform.Rotate(0, 180, 0);
i = 1;
Debug.Log(rb.velocity);
}
//如果进球,且篮板在右边,首先加分,改变球速度z方向,然后移动球框到左边,a是移动位置y轴的随机值,同时也要把球框调转
//debug用于调试
//后设置i = 0,改变位置
else if (other.gameObject.name == "goal"&& i==1)
{
speedZ = -speedZ;
float a = Random.Range(-13f, 1.3f);
GameObject.Find("BallFrame").transform.position = new Vector3(0, a, 0.25f);
GameObject.Find("BallFrame").transform.Rotate(0, 180, 0);
i = 0;
mark -= (int)rb.velocity.y;
Debug.Log(rb.velocity.y);
}
//如果球出界,触碰边界,则生命值就减一。
//球回到原位置
//当生命值小于或者等于0时,游戏结束,消除游戏体——ball
if (other.gameObject.name == "end"|| other.gameObject.name == "floor")
{
print("此球已经出界了");
health--;
GameObject.Find("ball").transform.position = new Vector3(0, 5, 13);
if(health <= 0)
{
Destroy(GameObject.Find("ball"));
GameObject.Find("Canvas").GetComponentInChildren<Text>().text = "游戏结束!";
print("游戏结束!!");
}
}
}
}
注释我都写在源码里面了,就不一一解释了。
到这里整个游戏就几乎完成了,剩下的一些开始界面,UI可以自己去写写,做完整。
要资源留言邮箱。