用一个比较low的办法做一个技能指示器
效果图
先来手动做个指示器(圆形范围技能为例)
1.创建个圆球sphere,调整大小比例弄成圆饼形状
2.添加自己喜欢的材质,删除sphere的碰撞体组件3.将sphere的Shader按照图示选择
然后调整合适的透明度(调整A就是透明度)
这样一个简单地指示器就做好了。记得将指示器弄成预制体。
下一步开始写脚本,挂在到角色身上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ReleaseSkills : MonoBehaviour
{
[Header("技能指示器")]
public GameObject mouseFace;
//技能指示器预设体,销毁的是这个,而不是上面那个
private GameObject mouseFaces;
//指示器位置
private Vector3 mouseFacesPos;
//射线碰撞检测
private RaycastHit hit;
//射线
private Ray ray;
//鼠标点击位置
private Vector3 skillPos;
private void Update()
{
//按住Q释放Q技能
if (Input.GetKey(KeyCode.Q))
{
SkillsPos();
}
}
//技能释放点
/// <summary>
/// 技能释放位置
/// </summary>
/// <param name="skill">技能</param>
public void SkillsPos()
{
//向鼠标点击的位置发射射线
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//输出hit击中的目标
Physics.Raycast(ray, out hit);
//射击点坐标赋值给指示器
mouseFacesPos = hit.point;
//指示器的y轴和角色保持一致
mouseFacesPos.y = transform.position.y;
//创建指示器预制体
mouseFaces = GameObject.Instantiate(mouseFace);
//给指示器坐标赋值
mouseFaces.transform.position = mouseFacesPos;
//每帧销毁一次预制体,因为是每帧都在创建预制体
Destroy(mouseFaces, 0.02f);
}
}
效果图
这样一个简单的技能指示器就完成啦,效果有点low,而且会有时不时的闪烁是因为销毁时间是0.02f,可自行调节,或者换个更好的办法…
想到一个比每帧销毁好一些的方法,在start里先创建一个指示器,然后赋值到一个永远看不到的位置,用到的时候在赋值到鼠标位置,不用了继续回到看不到的位置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ReleaseSkills : MonoBehaviour
{
[Header("技能指示器")]
public GameObject mouseFace;
//技能指示器预设体,销毁的是这个,而不是上面那个
private GameObject mouseFaces;
//指示器位置
private Vector3 mouseFacesPos;
//射线碰撞检测
private RaycastHit hit;
//射线
private Ray ray;
//鼠标点击位置
private Vector3 skillPos;
private void Start()
{
//创建指示器预制体
mouseFaces = GameObject.Instantiate(mouseFace);
//指示器坐标
mouseFaces.transform.position = new Vector3(0,0,0);
}
private void Update()
{
//按住Q释放Q技能
if (Input.GetKey(KeyCode.Q))
{
SkillsPos();
}
//如果抬起q就重置指示器的坐标
if (Input.GetKeyUp(KeyCode.Q))
{
//重置指示器的坐标
mouseFaces.transform.position = new Vector3(0, 0, 0);
}
}
//技能释放点
/// <summary>
/// 技能释放位置
/// </summary>
/// <param name="skill">技能</param>
public void SkillsPos()
{
//向鼠标点击的位置发射射线
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//输出hit击中的目标
Physics.Raycast(ray, out hit);
//射击点坐标赋值给指示器
mouseFacesPos = hit.point;
//指示器的y轴和角色保持一致
mouseFacesPos.y = transform.position.y;
//给指示器坐标赋值
mouseFaces.transform.position = mouseFacesPos;
}
}