1. 程式人生 > >[Unity實戰]攻擊範圍的繪製

[Unity實戰]攻擊範圍的繪製

原文連結:http://blog.csdn.net/lyh916/article/details/50383376

效果圖:









程式碼如下:

  1. using UnityEngine;  
  2. using System.Collections.Generic;  
  3. publicclass DrawTool : MonoBehaviour {  
  4.     privatestatic LineRenderer GetLineRenderer(Transform t)  
  5.     {  
  6.         LineRenderer lr = t.GetComponent<LineRenderer>();  
  7.         if (lr == null)  
  8.         {  
  9.             lr = t.gameObject.AddComponent<LineRenderer>();  
  10.         }  
  11.         lr.SetWidth(0.1f, 0.1f);  
  12.         return lr;  
  13.     }  
  14.     publicstaticvoid DrawLine(Transform t, Vector3 start, Vector3 end)  
  15.     {  
  16.         LineRenderer lr = GetLineRenderer(t);  
  17.         lr.SetVertexCount(2);  
  18.         lr.SetPosition(0, start);  
  19.         lr.SetPosition(1, end);  
  20.     }  
  21.     //繪製空心扇形  
  22.     publicstaticvoid DrawSector(Transform t, Vector3 center, float angle, float radius)  
  23.     {  
  24.         LineRenderer lr = GetLineRenderer(t);  
  25.         int pointAmount = 100;//點的數目,值越大麴線越平滑  
  26.         float eachAngle = angle / pointAmount;  
  27.         Vector3 forward = t.forward;  
  28.         lr.SetVertexCount(pointAmount);  
  29.         lr.SetPosition(0, center);  
  30.         lr.SetPosition(pointAmount - 1, center);  
  31.         for (int i = 1; i < pointAmount - 1; i++)  
  32.         {  
  33.             Vector3 pos = Quaternion.Euler(0f, -angle / 2 + eachAngle * (i - 1), 0f) * forward * radius + center;  
  34.             lr.SetPosition(i, pos);  
  35.         }  
  36.     }  
  37.     //繪製空心圓  
  38.     publicstaticvoid DrawCircle(Transform t, Vector3 center, float radius)  
  39.     {  
  40.         LineRenderer lr = GetLineRenderer(t);  
  41.         int pointAmount = 100;//點的數目,值越大麴線越平滑  
  42.         float eachAngle = 360f / pointAmount;  
  43.         Vector3 forward = t.forward;  
  44.         lr.SetVertexCount(pointAmount + 1);  
  45.         for (int i = 0; i <= pointAmount; i++)  
  46.         {  
  47.             Vector3 pos = Quaternion.Euler(0f, eachAngle * i, 0f) * forward * radius + center;  
  48.             lr.SetPosition(i, pos);  
  49.         }  
  50.     }  
  51.     //繪製空心長方形
  52.     //以長方形的底邊中點為攻擊方位置(從俯視角度來看)
  53.     publicstaticvoid DrawRectangle(Transform t, Vector3 bottomMiddle, float length, float width)  
  54.     {  
  55.         LineRenderer lr = GetLineRenderer(t);  
  56.         lr.SetVertexCount(5);  
  57.         lr.SetPosition(0, bottomMiddle - t.right * (width / 2));  
  58.         lr.SetPosition(1, bottomMiddle - t.right * (width / 2) + t.forward * length);  
  59.         lr.SetPosition(2, bottomMiddle + t.right * (width / 2) + t.forward * length);  
  60.         lr.SetPosition(3, bottomMiddle + t.right * (width / 2));  
  61.         lr.SetPosition(4, bottomMiddle - t.right * (width / 2));  
  62.     }  
  63.     //繪製空心長方形2D
  64.     //distance指的是這個長方形與Transform t的中心點的距離
  65.     publicstaticvoid DrawRectangle2D(Transform t, float distance, float length, float width)  
  66.     {  
  67.         LineRenderer lr = GetLineRenderer(t);  
  68.         lr.SetVertexCount(5);  
  69.         if (MathTool.IsFacingRight(t))  
  70.         {  
  71.             Vector2 forwardMiddle = new Vector2(t.position.x + distance, t.position.y);  
  72.             lr.SetPosition(0, forwardMiddle + new Vector2(0, width / 2));  
  73.             lr.SetPosition(1, forwardMiddle + new Vector2(length, width / 2));  
  74.             lr.SetPosition(2, forwardMiddle + new Vector2(length, -width / 2));  
  75.             lr.SetPosition(3, forwardMiddle + new Vector2(0, -width / 2));  
  76.             lr.SetPosition(4, forwardMiddle + new Vector2(0, width / 2));  
  77.         }  
  78.         else
  79.         {  
  80.             Vector2 forwardMiddle = new Vector2(t.position.x - distance, t.position.y);  
  81.             lr.SetPosition(0, forwardMiddle + new Vector2(0, width / 2));  
  82.             lr.SetPosition(1, forwardMiddle + new Vector2(-length, width / 2));  
  83.             lr.SetPosition(2, forwardMiddle + new Vector2(-length, -width / 2));  
  84.             lr.SetPosition(3, forwardMiddle + new Vector2(0, -width / 2));  
  85.             lr.SetPosition(4, forwardMiddle + new Vector2(0, width / 2));  
  86.         }  
  87.     }  
  88.     publicstatic GameObject go;  
  89.     publicstatic MeshFilter mf;  
  90.     publicstatic MeshRenderer mr;  
  91.     publicstatic Shader shader;  
  92.     privatestatic GameObject CreateMesh(List<Vector3> vertices)  
  93.     {  
  94.         int[] triangles;  
  95.         Mesh mesh = new Mesh();  
  96.         int triangleAmount = vertices.Count - 2;  
  97.         triangles = newint[3 * triangleAmount];  
  98.         //根據三角形的個數,來計算繪製三角形的頂點順序(索引)    
  99.         //順序必須為順時針或者逆時針    
  100.         for (int i = 0; i < triangleAmount; i++)  
  101.         {  
  102.             triangles[3 * i] = 0;//固定第一個點    
  103.             triangles[3 * i + 1] = i + 1;  
  104.             triangles[3 * i + 2] = i + 2;  
  105.         }  
  106.         if (go == null)  
  107.         {  
  108.             go = new GameObject("mesh");  
  109.             go.transform.position = new Vector3(0, 0.1f, 0);//讓繪製的圖形上升一點,防止被地面遮擋
  110. 相關推薦

    [Unity實戰]攻擊範圍繪製

    原文連結:http://blog.csdn.net/lyh916/article/details/50383376 效果圖: 程式碼如下:

    Unity實戰篇:實現場景切換畫面和進度條

    我們在進行Unity開發時,場景切換是不可避免的。例如MOBA從組隊房間到遊戲場景,MMO傳送,以及吃雞的從素質廣場到荒島,場景的切換勢必要載入大量的資料以及各個模組的初始化工作。那麼,如果要載入的場景過大,而使用者的硬碟或者其他硬體效能不夠強勁,那麼畫面就會卡住,等待很長一段時間,非常影響使用

    提交【截圖Unity指定螢幕範圍儲存為pdf檔案且指定儲存路徑】專案到github(略略略)

    1.Git & GithubDesktop https://git-scm.com/ 下載Git(程式猿本猿使用) https://desktop.github.com/ 下載GithubDesktop 2.命令語句 ps : github建立倉庫後有對應命令語句 g

    Unity實戰之Protobuf案例應用

    轉自https://blog.csdn.net/jxw167/article/details/80127696 Protobuf 全稱Protocol Buffers 是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,很適合做資料儲存或 RPC 資料交換格式。它可用於通訊協議、資料儲

    RPG遊戲中如何判斷敵人是否在玩家的攻擊範圍之內

    1 // 方式1:通過主角和場景中的所有敵人比較 2 private void AtkCondition1(float _range,float _angle) 3 { 4 // 搜尋所有敵人列表(在動態建立敵人時生成的) 5 // 列表儲存的並非敵人的GameObject而是

    Unity3D 攻擊範圍檢測

    一:扇形攻擊範圍檢測 using UnityEngine; using System.Collections; public class AttackCHeck : MonoBehaviour { //要攻擊的目標 public Transform Target; /

    Unity 實戰記錄】(一)攝像機區域內跟隨物體

    模仿Cinemachined 效果,用Cinemachine可輕鬆實現,貼程式碼 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public cla

    Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項(三)(UI互動邏輯開發)

    為了方便開發,我們把GameController做成一個單例。 using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using UnityEngine.UI; pu

    Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項(四)(物件池概念的引入以及優化)

    1.物件池基礎概念的瞭解(必看) 2.針對專案來進行嵌入 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unit

    Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項(完)(存檔,讀檔,排行榜的開發(PlayerPrefs))

    排行榜的開發利用PlayerPrefs來實現資料持久化,對PlayerPrefs不瞭解的同學先去看一下我這個部落格 先建立好UI 先在GameController裡面初始化鍵值。我們只有五個榜位,為什麼要建立6個呢,因為我們要儲存新的得分和等級,用來和已經儲存的相

    Android/Unity實戰篇:檢視安卓真機執行時的Debug資訊

    當我們在開發的時候,我們可以方便的用Debug來除錯程式,可是,有些問題恰巧出現在真機測試的時候,網上已經有了很多教程,可總是不完整,故在此寫一個完整版,供大家參考。 手機設定 使用USB連線電腦,開啟開發者模式,開啟USB除錯,允許除錯 電腦設定 找到安卓SDK所在目錄,

    系統分析師UML用例實戰-讀書摘要-繪製用例圖(1)

    1.1使用用例的時機 將軟體開發分為分析-設計-實現這三大步驟的話,用例主要用在分析階段。也就是說用例是一種系統分析技術。 分析:是為了說明系統是什麼,並說明這個系統會做哪些事。 設計:是為了說明系統如何工作,也就是說明系統應該如何一步一步地做到在分析階段所承諾的事情。 實現:就

    Unity實戰篇:MOBA遊戲小地圖製作(二:細節完善)

    1.場景新建一個Cube,命名為Ground,scale設定為200,0.01,200。 2.建立材質球,把準備好的地圖圖片(開一把MOBA遊戲~)拖進去,然後把材質球給Ground。 我們的地

    Unity實戰篇:實現連連看死局判定(二:具體實現)

    要做死局判定,我們要明確在什麼時候檢察地圖是否死局。 剛剛初始化地圖 每次消除之後  檢查死局前我們也要同步更新有向鄰接表字典和地圖陣列 我們約定,陣列值為-1代表此處為空 遍歷字典,找到要去除的元素,從字典刪除 避免異常,刪除元素後即退出函

    Unity實戰篇:實現連連看死局判定(一:資料結構的選擇以及基本思路概述)

    最近在做連連看小遊戲,整體完成的差不多,還差一個死局判定,若為死局,即重新洗牌。 由於專案結構較為繁雜,建議大家先下載原始碼 原始碼下載連結:https://gitee.com/NKG/UnityWorks/blob/master/UnityPackages/LinkUp.unitypa

    [Unity]空心圓範圍內隨機生成物品

    根據參考資料1 ,進行測試 在單位圓範圍內 取一個 隨機座標。 計算 向量(從原點0,0,0 到 該vector3 座標) 的長度 怎麼理解 什麼是 vector3.normalized,看下下面的這個例子 Ve

    [Unity實戰]相機觀察物體

    在原有的旋轉、縮放的基礎上加上了“慣性”。 using UnityEngine; using System.Collections; public class CameraObserve : MonoBehaviour { public Transform t

    判斷是否在攻擊範圍

    /// <summary> /// 判斷是否在攻擊範圍(4*6) /// </summary> /// <param name="attack"&

    unity實戰 實現滑鼠選擇物件前置顯示

    需求介紹: 實現玩家選中的物件在前置顯示 實現方案: 方案一:深度寫入和深度檢測 說明: ZTest:深度測試(LEqua小於等於、Less小於、Greater大於、Equal等於 , NotEqual不等於) 預設是LEqual,是一個對比顏色深度的方式,LEqual是表示新顏色小於等於舊顏色的

    [Unity實戰]自定義mesh

    參考連結:http://blog.csdn.net/zuoyamin/article/details/9287507 對於自定義mesh,有三點很重要: 1.頂點個數=三角形數+2;三角形頂點數=3*三角形數 2.頂點建立的順序最好是順時針或者逆時針建立的,這樣可以大大地