Unity入门操作_025_01

本文介绍如何在Unity中实现技能冷却按钮及流光视觉效果。通过两张精灵图片配合Mask制作动态技能按钮,并利用脚本实现技能的循环使用。同时,通过一系列脚本和图片精灵化处理,实现连续变化的流光效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CD的实现:
两张精灵图片的配合形成动态的button,Mask可以形成圆形图标,
然后将脚本挂载到button上进行一个事件联系就可以形成技能的循环使用。
这里写图片描述
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CD : MonoBehaviour {

public float leftTime;
public float totalTime;
private Image effectImage;
private Button cd_Button;
// Use this for initialization
void Start () {
    effectImage = transform.FindChild("Image").GetComponent<Image>();
    leftTime = totalTime;
    cd_Button= transform.GetComponent<Button>();
    cd_Button.interactable = false;
}
// Update is called once per frame
void Update () {
    leftTime -= Time.deltaTime;
    if (effectImage.fillAmount>0)
    {
        effectImage.fillAmount = leftTime / totalTime;
    }
    else
    {
        effectImage.fillAmount = 0;
        cd_Button.interactable = true;
    }
    }
public void FireSkill()
{
    Debug.Log("技能释放!");
    cd_Button.interactable = false;
    leftTime = totalTime;
    effectImage.fillAmount = 1;
}

}
流光:
将流光图片精灵化,将脚本挂载到游戏对象上,然后将流光拖入到
这里写图片描述里,然后将button拖入到最后的liu里。(这里需要注意,排序是系统对数字的识别有点奇怪,例如1到11的排列顺序是1,10,11,2,3,4,5,6,7,8,9)
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
public class LiuGuang : MonoBehaviour {

public Sprite[] sprites;
public Image liu;
// Use this for initialization
void Start () {
    Array.Sort(sprites, (x, y) => { return x.name.CompareTo(y.name); });
    liu = GetComponent<Image>();
}
float count;
int num;
// Update is called once per frame
void Update () {
    count++;
    if (count>6)
    {
        if (num==sprites.Length-1)
        {
            num = 0;
        }
        else
        {
            num++;
        }
        liu.sprite = sprites[num];
        count -= 6;
    }
}

}

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System;
public class Test30 : MonoBehaviour,IDragHandler,IEndDragHandler {

private Vector3 direction;
public float maxDistance;
public GameObject player;
// Use this for initialization
void Start () {
    }
// Update is called once per frame
void Update () {
    player.transform.forward = new Vector3(direction.x, 0, direction.y);
    int flag = Vector3.Distance(Vector3.zero, this.transform.localPosition) < 1f ? 0 : 1;
    player.transform.Translate(Vector3.forward * flag * Time.deltaTime, Space.Self);
}
public void OnDrag(PointerEventData eventData)
{
    transform.position = Input.mousePosition;
    if (Vector3.Distance(Vector3.zero,transform.localPosition) >maxDistance)
    {
        direction = transform.localPosition - Vector3.zero;
        transform.localPosition = direction.normalized * maxDistance;
    }
}
public void OnEndDrag(PointerEventData eventData)
{
    transform.localPosition = Vector3.zero;
}

}
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值