嗚嗚喔學習筆記

搜尋此網誌

2017年12月3日 星期日

C# Unity 計算兩向量之夾角 (扇形範圍偵測)



/// <summary>
/// 計算兩向量夾腳 0 ~ 360
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
private float Angle_360(Vector3 A, Vector3 B)
{
A.Normalize();
B.Normalize();
// -1 ~ 1
float angle = Vector3.Dot(A, B);
float theta = Mathf.Acos(Vector3.Dot(A, B));

return theta * 360 / Mathf.PI;
}

如果要做個扇形 偵測敵人
需要兩個東西

1. 角度
2. 多遠

所以求得 藍線 紅線 向量之後 就可以用上面的method求出角度了

2017年9月27日 星期三

RainAI 筆記:
Constraint - 條件節點 - 可以用Member當參數
Expression - 設值 (可以做數值運算)
Sequeter - 有 Scuess 依序做
Selector - 有Scuess 跳出
Radom - 隨機選擇

AI Remeber - 可以當動態成員用

WaypointRoute - 要用垂直視角看

http://legacy.rivaltheory.com/api/#
http://legacy.rivaltheory.com/wiki/rainelements/basicmind

CustomAction : RAINAction

2017年9月14日 星期四

UnityShader初體驗 - 12-5 Shader筆記 ( Bloom效果 )

12-5 Shader筆記
Bloom效果




1. 找出較亮的區域
2. 使用高斯模糊 (模擬光暈)
3. 跟原本影像做合成


總共使用4個Pass
1. 找出亮區域


2 和 3 做高斯模糊

4 合成

2017年7月28日 星期五

C# - 從 Linq 學習 [ 如何使用 Delegate , Func , Lambda ) ]

這篇不是在說 怎麼使用 Linq

而是再說嘗試 寫出Linq
------------------------------------------

http://tim12332013.blogspot.tw/2017/06/c-linq-interface-generic.html
繼上一篇 Linq ToList() 學習 Interface 跟 Generic之後
這篇來說說 Where()   
------------------------------------------

這篇主要重點在有三個
1. Delegate - 委派
2. Func - 有回傳值得委派
3. Lambda - 匿名函示 ( 簡化版 )

在知道上述三樣東西之後才會看懂下面在說啥
-------------------------------------------
先貼程式 :



結果: 找出 1~10 中 能被 2 整除的數 (答 2 4 6 8 10)



結論:

利用Foreach IEnumerable<T> 找出所有Item
再拿別人傳進來的 Func 來執行
最後回傳答案

2017年7月7日 星期五

UnityShader初體驗 - 數學基礎 - 笛卡爾座標


最近看了本 "只有unity shader才能超越unity" 紀錄一下心得  0.0

笛卡爾坐標系 - 描述一個東西位置 的方法

Wiki:https://zh.wikipedia.org/wiki/%E7%AC%9B%E5%8D%A1%E5%84%BF%E5%9D%90%E6%A0%87%E7%B3%BB

二維坐標系 (平面空間)

三維坐標系 (3D空間)

三維 通常分成  左手座標 , 右手座標

「左右手座標」的圖片搜尋結果

為什麼要分 左右手的原因就是
在做旋轉的時候 在不同座標下 看起來不一樣
舉例來說
在空間中 用一個點  已一條直線為旋轉軸
旋轉30° 

那會發現有兩種旋轉方向可以選擇
這時候就可以用左右手法則 
依據屬於哪個坐標系
判斷要往哪一邊旋轉大拇指朝上 , 4隻手指的方向 就是答案 

相關圖片

書上練習題 : 

Q: (0,0,1) 座標的點  繞著Y軸 正方向旋轉 ,
在左 , 右 手座標系中 , 分別會變成什麼位置?

A: 左: (1,0,0) 右 (1,0,0)

有錯請指證@@

2017年6月26日 星期一

C# - 從 Linq 學習 [ 如何使用 Interface(介面) 和 Generic(泛型) ]

這篇不是在說 怎麼使用 Linq
而是再說嘗試 寫出Linq
試圖去解析 Linq的寫法
希望帶來一些啟發
可以用在專案上

如果只是想知道如何使用
可以左轉參考這邊
https://kw0006667.wordpress.com/2013/05/29/clinq%E7%B0%A1%E5%96%AE%E4%BD%BF%E7%94%A8-from-where-select/
我覺得這篇寫得還不錯

----------------------------------------------------

這篇用 Linq 的 ToList() 當作範例 :
總歸來說 他使用了三樣東西

1. 擴充函式
2. Interface
3. Generic

在已經知道上述 3 樣東西的是什麼前提下
才會了解下面在說啥

-----------------------------------------------------
切入正題 :

Queue<T> , Statck<T> , T[]
都能夠直接使用Linq語法 ToList()
直接轉換成 List<T> 的形式
為什麼?

因為我們都知道一個規則
兒子Class 可以使用 爸爸Class 的 函式

Queue<T> : IEnumerable<T> 
Stack<T> : IEnumerable<T> 
T[] : IEnumerable<T>

所以基於 ( 因為爸爸有 所以我也有的概念 )
我們直接擴充爸爸就好啦 ~

範例程式碼 :



結果:

 

-------------------------------------------------------------------
結論 :
最終成功山寨了 Linq ToList() 這個Function
至於其他Linq的 Function 也是基於差不多的想法
只是有用到 delegate 等等其他技巧
可能可以再寫一篇 0.0

2017年5月2日 星期二

UnityShader初體驗 - 法向量 , 跟RGB的關係的理解

x,y,z 坐標系 由圖可以知道 Unity 裡
右邊->X
上面->Y
深度->Z
「unity x y z」的圖片搜尋結果

那我們也知道顏色 RGB 使用類似的方式儲存資訊 

(r,g,b)


那如果我們把 一顆球的顏色 用 法向量取代會發生什麼事情呢?

因為
(x,y,z) <-> (r,g,b)

已這樣的對應關係 

大膽猜出 一顆圓的頂端 會是綠色
因為

頂端的法向量值 -> (x,y,z) => (0,1,0) => (r,g,b) 綠色

右方的法向量值 -> (x,y,z) => (1,0,0) => (r,g,b) 紅色

前方的法向量值 -> (x,y,z) =>(0,0,1) => (r,g,b) 藍色


那我實際看看結果圖 


那證明這樣的推論是對的 上方是綠色 , 右方是紅色
換個角度再看一次


這次換到對面看 那這樣可以看到 正面藍色 上方綠色 左方紅色 
也符合邏輯

那就看一下程式碼


這裡的實作就是把每個顏色 
使用 
法向量的值取代 
o.color = v.normal