[Unity實戰]攻擊範圍的繪製
原文連結:http://blog.csdn.net/lyh916/article/details/50383376
效果圖:
程式碼如下:
- using UnityEngine;
- using System.Collections.Generic;
- publicclass DrawTool : MonoBehaviour {
- privatestatic LineRenderer GetLineRenderer(Transform t)
-
{
- LineRenderer lr = t.GetComponent<LineRenderer>();
- if (lr == null)
- {
- lr = t.gameObject.AddComponent<LineRenderer>();
- }
- lr.SetWidth(0.1f, 0.1f);
- return lr;
- }
-
publicstaticvoid DrawLine(Transform t, Vector3 start, Vector3 end)
- {
- LineRenderer lr = GetLineRenderer(t);
- lr.SetVertexCount(2);
- lr.SetPosition(0, start);
- lr.SetPosition(1, end);
- }
- //繪製空心扇形
- publicstaticvoid DrawSector(Transform t, Vector3 center, float angle, float radius)
- {
-
LineRenderer lr = GetLineRenderer(t);
- int pointAmount = 100;//點的數目,值越大麴線越平滑
- float eachAngle = angle / pointAmount;
- Vector3 forward = t.forward;
- lr.SetVertexCount(pointAmount);
- lr.SetPosition(0, center);
- lr.SetPosition(pointAmount - 1, center);
- for (int i = 1; i < pointAmount - 1; i++)
- {
- Vector3 pos = Quaternion.Euler(0f, -angle / 2 + eachAngle * (i - 1), 0f) * forward * radius + center;
- lr.SetPosition(i, pos);
- }
- }
- //繪製空心圓
- publicstaticvoid DrawCircle(Transform t, Vector3 center, float radius)
- {
- LineRenderer lr = GetLineRenderer(t);
- int pointAmount = 100;//點的數目,值越大麴線越平滑
- float eachAngle = 360f / pointAmount;
- Vector3 forward = t.forward;
- lr.SetVertexCount(pointAmount + 1);
- for (int i = 0; i <= pointAmount; i++)
- {
- Vector3 pos = Quaternion.Euler(0f, eachAngle * i, 0f) * forward * radius + center;
- lr.SetPosition(i, pos);
- }
- }
- //繪製空心長方形
- //以長方形的底邊中點為攻擊方位置(從俯視角度來看)
- publicstaticvoid DrawRectangle(Transform t, Vector3 bottomMiddle, float length, float width)
- {
- LineRenderer lr = GetLineRenderer(t);
- lr.SetVertexCount(5);
- lr.SetPosition(0, bottomMiddle - t.right * (width / 2));
- lr.SetPosition(1, bottomMiddle - t.right * (width / 2) + t.forward * length);
- lr.SetPosition(2, bottomMiddle + t.right * (width / 2) + t.forward * length);
- lr.SetPosition(3, bottomMiddle + t.right * (width / 2));
- lr.SetPosition(4, bottomMiddle - t.right * (width / 2));
- }
- //繪製空心長方形2D
- //distance指的是這個長方形與Transform t的中心點的距離
- publicstaticvoid DrawRectangle2D(Transform t, float distance, float length, float width)
- {
- LineRenderer lr = GetLineRenderer(t);
- lr.SetVertexCount(5);
- if (MathTool.IsFacingRight(t))
- {
- Vector2 forwardMiddle = new Vector2(t.position.x + distance, t.position.y);
- lr.SetPosition(0, forwardMiddle + new Vector2(0, width / 2));
- lr.SetPosition(1, forwardMiddle + new Vector2(length, width / 2));
- lr.SetPosition(2, forwardMiddle + new Vector2(length, -width / 2));
- lr.SetPosition(3, forwardMiddle + new Vector2(0, -width / 2));
- lr.SetPosition(4, forwardMiddle + new Vector2(0, width / 2));
- }
- else
- {
- Vector2 forwardMiddle = new Vector2(t.position.x - distance, t.position.y);
- lr.SetPosition(0, forwardMiddle + new Vector2(0, width / 2));
- lr.SetPosition(1, forwardMiddle + new Vector2(-length, width / 2));
- lr.SetPosition(2, forwardMiddle + new Vector2(-length, -width / 2));
- lr.SetPosition(3, forwardMiddle + new Vector2(0, -width / 2));
- lr.SetPosition(4, forwardMiddle + new Vector2(0, width / 2));
- }
- }
- publicstatic GameObject go;
- publicstatic MeshFilter mf;
- publicstatic MeshRenderer mr;
- publicstatic Shader shader;
- privatestatic GameObject CreateMesh(List<Vector3> vertices)
- {
- int[] triangles;
- Mesh mesh = new Mesh();
- int triangleAmount = vertices.Count - 2;
- triangles = newint[3 * triangleAmount];
- //根據三角形的個數,來計算繪製三角形的頂點順序(索引)
- //順序必須為順時針或者逆時針
- for (int i = 0; i < triangleAmount; i++)
- {
- triangles[3 * i] = 0;//固定第一個點
- triangles[3 * i + 1] = i + 1;
- triangles[3 * i + 2] = i + 2;
- }
- if (go == null)
- {
- go = new GameObject("mesh");
- go.transform.position = new Vector3(0, 0.1f, 0);//讓繪製的圖形上升一點,防止被地面遮擋
-
相關推薦
[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.頂點建立的順序最好是順時針或者逆時針建立的,這樣可以大大地