【Unity3D】判断是否鼠标点击物体与血条制作
2017-04-20 21:18
507 查看
血条是在游戏中非常常见的东西,和Cocos2dx中《【Cocos2dx】利用音量螺旋控件控制血量条 》(点击打开链接)一样,Unity3D的血条也其实就是用一个slider就能做完的事情。同时,本文也将继《【Unity3D】用鼠标点击事件、AddForce完成跳跃与二段跳》(点击打开链接)说明鼠标点击屏幕屏幕进一步说明鼠标点击任一物体的监听。
下面将举一个例子说明这个物体,如图,血条代表10格血,如果球被点一下,则扣1格血,点屏幕其它地方不扣血。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/ea69dc78677cff7e80736413ac5c864f)
一、场景布置
1、这部分主要叙述怎么将Slider改成血条的。开始先放个球、调整下照相机,在球中放个灯光看起来更好看,就不赘述了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/4dcf18eb6c346606891534acf5221268)
2、如同《【Unity3D】场景切换、UGUI组件事件、开始游戏与关闭游戏》(点击打开链接)中所有UI一样,一旦用到UGUI,先要添加一个Canvas,之后再于Canvas上整个Slider。Slider添加完毕,直接将Handle SliderArea去掉,也就是那个滑动杆、滑块。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/3637bd20083d8ff880f527e6ca525cce)
同时在Slider的Inspector中是不可交互的,以为不允许用户自行滑动滑块。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/20dd9ee53bc62888d14c345b83c746df)
3、修改Background的背景色为黑色,Fill Area的Fill填充色为红色,如图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/cb368ae0109d4bc5eee3684ea63b4511)
4、弄好之后,发现血条并未被填满。其实空出来这部分原本就是留给被我们去掉的Handle SliderArea的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/20fa5598bfbe06ea98879e73056f7813)
现在选择Fill Area在Inspector面板中修改Rect Transform中个属性,将Left、Right的值都设为0,至此一个简单的血条就制作完成了,或者你直接用矩形工具将红色的Fill Area调整到和Background一样大小也行。
5、之后我们并不需要这个Canvas和《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)一样填充到整个屏幕。如下图,将Canvas的渲染设置到World Space,也就是像普通东西一样渲染。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/c61380f4aab93eff3c3b04c4a8e7fa5b)
之后我们需要同时对Slider和Canvas的位置和大小进行调整。调整后的属性,如图所示,不然太大了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/452afaf75dadeb8611ce65338e74cb90)
二、脚本布置
之后我们要实现点击球,就扣血的功能,编写如下脚本SphereClicked.cs,赋予到球上。
using UnityEngine;
using System.Collections;
using UnityEngine.UI; //Slider属于UI,用到这个头文件
public class SphereClicked : MonoBehaviour
{
public Slider HPStrip; //添加血条Slider的引用
public int HP = 10;//开始为10滴血
void Start()
{
HPStrip.value = HPStrip.maxValue = HP; //初始化血条
GameObject.Find("Sphere").AddComponent<MeshCollider>();//球与下面的抽象射线碰撞检测必须
}
void Update()
{
if (Input.GetMouseButtonDown(0))//鼠标左键点下
{
//住摄像机向鼠标位置发射射线
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit mHit;
//射线检验
if (Physics.Raycast(mRay, out mHit))
{
if (mHit.collider.gameObject.tag == "Sphere")
{
HP--;//点到这个球,血就-1
HPStrip.value = HP; //对血条执行操作
}
}
}
/*之后还可以根据HP进行一些操作*/
if (HP <= 0)
{
//写下血条被清空之后的处理
}
}
}
给球上这个脚本之后,还没有完,如同《【Unity3D】利用物体碰撞检测、键盘输入处理完成平衡球游戏》(点击打开链接)碰撞检测一样,我们先要给这个球,赋予一个tag,根据代码,这里的tag就是"Sphere"。再如同《【Unity3D】同场景物体传值与Vector》(点击打开链接)中,设定我们这个脚本的public
Slider HPStrip;就是我们刚才弄好的血条。
下面将举一个例子说明这个物体,如图,血条代表10格血,如果球被点一下,则扣1格血,点屏幕其它地方不扣血。
一、场景布置
1、这部分主要叙述怎么将Slider改成血条的。开始先放个球、调整下照相机,在球中放个灯光看起来更好看,就不赘述了。
2、如同《【Unity3D】场景切换、UGUI组件事件、开始游戏与关闭游戏》(点击打开链接)中所有UI一样,一旦用到UGUI,先要添加一个Canvas,之后再于Canvas上整个Slider。Slider添加完毕,直接将Handle SliderArea去掉,也就是那个滑动杆、滑块。
同时在Slider的Inspector中是不可交互的,以为不允许用户自行滑动滑块。
3、修改Background的背景色为黑色,Fill Area的Fill填充色为红色,如图所示。
4、弄好之后,发现血条并未被填满。其实空出来这部分原本就是留给被我们去掉的Handle SliderArea的。
现在选择Fill Area在Inspector面板中修改Rect Transform中个属性,将Left、Right的值都设为0,至此一个简单的血条就制作完成了,或者你直接用矩形工具将红色的Fill Area调整到和Background一样大小也行。
5、之后我们并不需要这个Canvas和《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)一样填充到整个屏幕。如下图,将Canvas的渲染设置到World Space,也就是像普通东西一样渲染。
之后我们需要同时对Slider和Canvas的位置和大小进行调整。调整后的属性,如图所示,不然太大了。
二、脚本布置
之后我们要实现点击球,就扣血的功能,编写如下脚本SphereClicked.cs,赋予到球上。
using UnityEngine;
using System.Collections;
using UnityEngine.UI; //Slider属于UI,用到这个头文件
public class SphereClicked : MonoBehaviour
{
public Slider HPStrip; //添加血条Slider的引用
public int HP = 10;//开始为10滴血
void Start()
{
HPStrip.value = HPStrip.maxValue = HP; //初始化血条
GameObject.Find("Sphere").AddComponent<MeshCollider>();//球与下面的抽象射线碰撞检测必须
}
void Update()
{
if (Input.GetMouseButtonDown(0))//鼠标左键点下
{
//住摄像机向鼠标位置发射射线
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit mHit;
//射线检验
if (Physics.Raycast(mRay, out mHit))
{
if (mHit.collider.gameObject.tag == "Sphere")
{
HP--;//点到这个球,血就-1
HPStrip.value = HP; //对血条执行操作
}
}
}
/*之后还可以根据HP进行一些操作*/
if (HP <= 0)
{
//写下血条被清空之后的处理
}
}
}
给球上这个脚本之后,还没有完,如同《【Unity3D】利用物体碰撞检测、键盘输入处理完成平衡球游戏》(点击打开链接)碰撞检测一样,我们先要给这个球,赋予一个tag,根据代码,这里的tag就是"Sphere"。再如同《【Unity3D】同场景物体传值与Vector》(点击打开链接)中,设定我们这个脚本的public
Slider HPStrip;就是我们刚才弄好的血条。
相关文章推荐
- unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
- Unity 物体跟随鼠标点击移动,判断物体是否在移动
- unity3d点击屏幕判断是否击中场景中物体
- 关于Unity3D判断物体是否在视角内(巧妙!)
- 【Unity3D自学记录】NGUI之判断鼠标是否在UI界面上
- [unity3d]判断物体是否在视角内(巧妙的一篇转载)
- Unity3d 射线测试+使用手势判断是否触碰了某物体
- Unity3D 判断鼠标是否按在UGUI上
- UGUI 之 判断鼠标或者手指是否点击在UI上
- unity3D 实现NGUI物体朝鼠标点击位置移动
- 【Unity】UGUI如何判断鼠标或者手指是否点击到UI上
- 【NGUI】Unity中如何判断NGUI中当前鼠标是否点击UI上
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- Unity3d--判断鼠标是否触发UGUI控件
- Unity3D鼠标点击物体产生事件
- UGUI -(unity3d 5)判断是否点击在UI 上 Bug,IsPointerOverGameObject()在移动输入模式检测失败
- 通过GetPixel()函数获取鼠标点击处的象素颜色判断该点是否在曲线上
- 【Unity3D自学记录】判断物体是否在镜头内
- jquery判断鼠标点击的位置是否在规定的div范围内部
- 判断鼠标或者手指是否点击在UI上(用于应对不能点击UI的情况)