unity3d技能冷却cd(最后一篇)

本文介绍如何在Unity3D中创建一个三角形,并讲解如何为游戏对象添加材质。通过导入图片并创建材质球,将图片应用到游戏对象上,展示了一种简单的图形和资源管理方法。

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

大家好,小弟又来了,

接着上一篇的分享,下面我们先来绘制一个三角形

直接上代码了

 

using UnityEngine;
using System.Collections;

public class ski : MonoBehaviour {
 
 private MeshFilter mesfilter;
 
 void Start ()
 {
  //既然我们用到Mesh,那么首先我们就应该先获得到Mesh实例
  //mesfilter = GetComponent<MeshFilter> ();
  
 // Mesh mesh = mesfilter.mesh;
  //三角形顶点坐标数组
  Vector3[] vertices = new Vector3[3];
  
  //三角形的顶点坐标
  vertices[0] = new Vector3(0,0,0);
  vertices[1] = new Vector3(0,1,0);
  vertices[2] = new Vector3(1,0,0);
  
  //三角形顶点数组ID
  int[] triangles = new int[3];
  
  triangles[0] = 0;
  triangles[1] = 1;
  triangles[2] = 2;
  //走到这里的时候会重新为网络模型创建MeshFilter赋值的
 // mesh.vertices = vertices;
 // mesh.triangles = triangles;
  
 }
 
 // Update is called once per frame
 void Update () {
  
 }
}

大家可以创建一个空的游戏对象然后添加脚本,给这个对象添加一个材质

大家可以看到

那么怎么样创建一个材质呢,

在Assets文件夹下导入一张导入一张看起来有层次的图片,在Project视图下右键新建一个材质球(Material),选中材质球(就是上图右下角select(选择),然后选择我们刚刚导入的图片)

ok  赶紧去试试吧 

 

接下来就是重要的代码啦

using UnityEngine;
using System.Collections;


[ExecuteInEditMode]
[AddComponentMenu("Ace/Skill/Mask")]
public class MyMask : MonoBehaviour {

    private MeshFilter meshFilter;

    private Vector3[] verts = new Vector3[10];
    private float halfWidth = 0.5f;
    private float halfHeight = 0.5f;
    private float start;//开始时间
    private float total;//技能冷却时间
    private float once;
    public Color color;

    private bool play = false;

	void Start () {
	    meshFilter=GetComponent<MeshFilter>();
        meshFilter.sharedMesh = new Mesh();
        ResetVertices();
        SetMeshVertices(meshFilter.sharedMesh);
        
        setTriangles(meshFilter.sharedMesh);
        setColor(meshFilter.sharedMesh);
        startMovice(30);
	}

    void OnMouseUp() {
        startMovice(60);
    }

    public void startMovice(float time) {
        if (play) return;
        total = time;
        once = total / 8;//这里用8个三角形 总时间算出每个三角形需要耗时
        renderer.enabled = true;//每次开始让描绘对象可见
        ResetVertices();//每次开始重置顶点数据
        play = true;
    }

    private void ResetVertices()
    {
        verts[0] = new Vector3(0.0f, 0.0f, 0.0f);
        verts[1] = new Vector3(0.0f, halfHeight, 0.0f);
        verts[2] = new Vector3(halfWidth, halfHeight, 0.0f);
        verts[3] = new Vector3(halfWidth, 0.0f, 0.0f);
        verts[4] = new Vector3(halfWidth, -halfHeight, 0.0f);
        verts[5] = new Vector3(0.0f, -halfHeight, 0.0f);
        verts[6] = new Vector3(-halfWidth, -halfHeight, 0.0f);
        verts[7] = new Vector3(-halfWidth, 0.0f, 0.0f);
        verts[8] = new Vector3(-halfWidth, halfHeight, 0.0f);
        verts[9] = new Vector3(0.0f, halfHeight, 0.0f);
    }

    // 设置Mesh顶点数据
    private void SetMeshVertices(Mesh mesh)
    {
        Vector3[] vertices = new Vector3[verts.Length];
        for (int i = 0; i < verts.Length; ++i)
        {
            vertices[i] = verts[i];
        }
        mesh.vertices = vertices;
    }

    private void setColor(Mesh mesh)
    {
        Color[] colors = new Color[mesh.vertices.Length];
        for (int i = 0; i < colors.Length; ++i)
        {
            colors[i] = color;
        }

        mesh.colors = colors;
    }

    private void setTriangles(Mesh mesh)
    {
        mesh.triangles = new int[]{
            0,1,2,
            0,2,3,
            0,3,4,
            0,4,5,
            0,5,6,
            0,6,7,
            0,7,8,
            0,8,9
        };
    }
	
	// Update is called once per frame
    void FixedUpdate()
    {
        if (!play) return;
        UpdateEffect(meshFilter.sharedMesh);
	}

    public void UpdateEffect(Mesh mesh)
    {
        float now = Time.time - start;
        if (now >=total) { renderer.enabled = false; return; }
        // 更新顶点数据
        Vector3[] vertices = mesh.vertices;
        float percent = (now % once) / once;  // 每个三角面遮罩的百分比
        int index = (int)(now / once) + 1; // 当前修改的顶点索引
        for (int i = index; i >0; --i)
        {
            switch (index)
            {
                case 1:
                    vertices[i].x = halfWidth * percent;
                    break;

                case 2:
                    vertices[i].y = halfHeight - halfHeight * percent;
                    break;

                case 3:
                    vertices[i].y = -halfHeight * percent;
                    break;

                case 4:
                    vertices[i].x = halfWidth * (1 - percent);
                    break;

                case 5:
                    vertices[i].x = -halfWidth * percent;
                    break;

                case 6:
                    vertices[i].y = -halfHeight * (1 - percent);
                    break;

                case 7:
                    vertices[i].y = halfHeight * percent;
                    break;

                case 8:
                    vertices[i].x = -halfWidth + halfWidth * percent;
                    break;
            }
        }

        mesh.vertices = vertices;
    }
}

直接把大神的代码复制过来研究了一下,嘎嘎,大家可以先看看,

下一遍  使用NGUI来做技能的cd   嘻嘻  感谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值