zoukankan      html  css  js  c++  java
  • Unity中 生成箭头(2D)

      1 /*
      2 /// 功能: 绘制箭头
      3 /// 时间:
      4 /// 版本:
      5 */
      6 
      7 using System.Collections;
      8 using System.Collections.Generic;
      9 using UnityEngine;
     10 using UnityEngine.UI;
     11 
     12 [AddComponentMenu("UI/Effects/Arrow")]
     13 [RequireComponent(typeof(Image))]
     14 [ExecuteInEditMode]
     15 public class Arrow : BaseMeshEffect
     16 {
     17     public enum DirectionType
     18     {
     19         Left,
     20         Right,
     21         Up,
     22         Down,
     23     }
     24 
     25     public DirectionType directionType;
     26 
     27     public float width = 1;
     28     public float height = 1;
     29     public float angle;
     30     public Color color;
     31 
     32     private Image image;
     33 
     34     protected override void Start()
     35     {
     36         image = this.GetComponent<Image>();
     37     }
     38 
     39     public override void ModifyMesh(VertexHelper vh)
     40     {
     41         vh.Clear();
     42 
     43         List<Vector3> vertexList = new List<Vector3>();
     44         Vector3 v0=Vector3.zero;
     45         Vector3 v1=Vector3.zero;
     46         Vector3 v2=Vector3.zero;
     47         Vector3 v3=Vector3.zero;
     48         Vector3 v4 = Vector3.zero;
     49 
     50         //有5个点"
     51         switch (directionType)
     52         {
     53             case DirectionType.Left:
     54                 v1 = new Vector3(-width, 0);
     55                 v2 = new Vector3(-width - height / Mathf.Tan(angle * Mathf.PI / 180), height / 2);
     56                 v3 = new Vector3(-width, height);
     57                 v4 = new Vector3(0, height);
     58                 break;
     59             case DirectionType.Right:
     60                 v1 = new Vector3(width, 0);
     61                 v2 = new Vector3(width + height / Mathf.Tan(angle * Mathf.PI / 180), height / 2);
     62                 v3 = new Vector3(width, height);
     63                 v4 = new Vector3(0, height);
     64                 break;
     65             case DirectionType.Up:
     66                 v1 = new Vector3(width, 0);
     67                 v2 = new Vector3(width,height);
     68                 v3 = new Vector3(width/2, height+height/Mathf.Tan(angle*Mathf.PI/180));
     69                 v4 = new Vector3(0, height);
     70                 break;
     71             case DirectionType.Down:
     72                 v1 = new Vector3(width, 0);
     73                 v2 = new Vector3(width, -height);
     74                 v3 = new Vector3(width / 2, -height - height / Mathf.Tan(angle * Mathf.PI / 180));
     75                 v4 = new Vector3(0, -height);
     76                 break;
     77             default:
     78                 break;
     79         }
     80 
     81         vertexList.Add(v0, v1, v2, v3, v4);
     82 
     83         for (int i = 0; i < vertexList.Count; i++)
     84         {
     85             vh.AddVert(vertexList[i], color, Vector3.zero);
     86         }
     87 
     88         vh.AddTriangle(0, 1, 2);
     89         vh.AddTriangle(0, 1, 3);
     90         vh.AddTriangle(1, 2, 3);
     91         vh.AddTriangle(2, 3, 4);
     92         vh.AddTriangle(3, 4, 0);
     93         vh.AddTriangle(0, 1, 4);
     94     }
     95 
     96     private void Update()
     97     {
     98         image.SetVerticesDirty();
     99     }
    100 }
    View Code
  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/nanyang0310/p/14822005.html
Copyright © 2011-2022 走看看