- 5月 02 週六 201514:52
Vuforia Virtual Buttons In UNITY
- 4月 23 週四 201522:08
VuForia Image Target 練習for UNITY
- 4月 22 週三 201517:41
MonoBehaviour API: OnBecameVisible 與 OnBecameInvisible 的用法
#region 要掛在有MESH RENDER的物件上才有用
/// <summary>
/// <summary>
- 4月 04 週六 201511:07
轉貼:通過修改UV 坐標實現紋理貼圖的滾動
將河流物件換上此Shader即可傭有流動的水

- 3月 22 週日 201521:53
在編輯環境使用工具列來切換場景並且啟動遊戲
[MenuItem("Edit/Play-Unplay, But From Prelaunch Scene %0")]
publicstaticvoidPlayFromPrelaunchScene()
{
if(EditorApplication.isPlaying ==true)
{
EditorApplication.isPlaying =false;
return;
}
EditorApplication.SaveCurrentSceneIfUserWantsTo();
EditorApplication.OpenScene(
"Assets/stuff/Scenes/__preEverythingScene.unity");
EditorApplication.isPlaying =true;
}
}
- 3月 06 週五 201514:47
Euler方法:歐拉角對應的四元數
//记录欧拉角,单位为角度,可以在Inspector面板中设置
public float ex, ey, ez;
//用于记录计算结果
float qx, qy, qz, qw;
- 3月 06 週五 201514:16
使得一个物体的rotation始终和另一个物体的rotation保持一致
02.using System.Collections;
03.
04.public class ToAngleAxis_ts : MonoBehaviour {
05. public Transform A, B;
06. float angle;
07. Vector3 axis = Vector3.zero;
08.
09. void Update () {
10. //使用ToAngleAxis获取A的Rotation的旋转轴和角度
11. A.rotation.ToAngleAxis(out angle, out axis);
12. //使用AngleAxis设置B的rotation,使得B的rotation状态的和A相同
13. //当然也可以只使得B与A的axis相同,而angle不同
14. //可以在程序运行时修改A的rotation查看B的状态
15. B.rotation = Quaternion.AngleAxis(angle,axis);
16. }
17.}
- 2月 23 週一 201509:20
轉貼:Unity3D研究院之Time.timeScale、游戏暂停
timeScale不會影響Update和LateUpdate的執行速度。因為FixedUpdate是根據時間來的,所以timeScale只會影響FixedUpdate的速度。再次抱歉。 。謝謝熱心網友給我的指正。 。因為我的項目裡在處理戰鬥部分的時候大量使用iTween 所以2 3 倍加速或者暫停的功能直接修改timeScale 。
Time.timeScale也誤導了我很久,為什麼這麼說呢?我原先一直以為Time.timeScale = 0 的話所有的Update都不執行了。今天測試了一下發現原來不是這樣的,無論Time.timeScale 等於多說Update和LateUpdate都會去執行,不信你可以自己做個實驗看看。
Time.timeScale還會影響Time.time的時間,比如Time.timeScale = 2的話,那麼Time.time的增長速度也會變成2倍速度。如果你想取到遊戲的實際時間,那麼使用Time.timeSinceLevelLoad就可以,前提是必須在Awake()方法以後再取,如果在Awake()方法裡面取Time.realtimeSinceStartup會取出一個錯誤的值,在Start方法裡面取的話就正常了。
總之一句話Time.timeScale影響的是Unity的遊戲時間縮放比例。 Unity裡面所有跟時間有關係的東西都是根據timeScale來演算的。仔細想想現在的手游就是個動畫和粒子技能特效還有UI位移特效,所以改他們的速度直接用Time.timeScale就可以完成。還有一個重要的東西就是人物移動或者技能移動的速度了, 根據時間的公式,時間= 路程\速度,比如角色從起點跑到中間的一個預期時間, 或者一個技能的火球從攻擊到打中目標的預期時間。凡是處理時間的東東全用Time.time 這樣就可以完美讓Time.timeScale控制你的遊戲了。
下面說說兩個大傢伙比較關心的話題。
1.遊戲暫停
設置Time.timeScale = 0;即可讓遊戲暫停。其實我們暫停的主要是人物動畫,還有技能特效,比如一個火球打了一半。 UI方面往往我們不希望暫停,比如暫停界面有一些UI位移動畫或者幀動畫, 或者最起碼要有個“取消暫停的按鈕” 吧。總不能遊戲暫停了我點擊按鈕按鈕的點擊動畫或者特效也暫停了吧。
所有的動畫都是基於時間來的,因為Time.timeScale = 0了,所以Time.time也就不會在變化了。換句話來說如果遊戲暫停以後想在暫停界面上繼續播放一些不受Time.timeScale 影響的動畫,那麼我們就需要用到Time.realtimeSinceStartup
如 果你的項目NGUI的版本還算比較新的話,你會發現在UITweener.cs處理UI動畫的基類裡面已經增加了一個屬性叫public bool ignoreTimeScale = true; 它就是控制控制NGUI 的UI動畫是否受到ignoreTimeScale影響。如下圖所示,你可以看看NGUI在Update裡面的實現,它也是根據時間來判斷的。忽略timescale的話就用真實時間,不忽略的話就用Time.time 和Time.deltaTime。
Time.timeScale也誤導了我很久,為什麼這麼說呢?我原先一直以為Time.timeScale = 0 的話所有的Update都不執行了。今天測試了一下發現原來不是這樣的,無論Time.timeScale 等於多說Update和LateUpdate都會去執行,不信你可以自己做個實驗看看。
Time.timeScale還會影響Time.time的時間,比如Time.timeScale = 2的話,那麼Time.time的增長速度也會變成2倍速度。如果你想取到遊戲的實際時間,那麼使用Time.timeSinceLevelLoad就可以,前提是必須在Awake()方法以後再取,如果在Awake()方法裡面取Time.realtimeSinceStartup會取出一個錯誤的值,在Start方法裡面取的話就正常了。
總之一句話Time.timeScale影響的是Unity的遊戲時間縮放比例。 Unity裡面所有跟時間有關係的東西都是根據timeScale來演算的。仔細想想現在的手游就是個動畫和粒子技能特效還有UI位移特效,所以改他們的速度直接用Time.timeScale就可以完成。還有一個重要的東西就是人物移動或者技能移動的速度了, 根據時間的公式,時間= 路程\速度,比如角色從起點跑到中間的一個預期時間, 或者一個技能的火球從攻擊到打中目標的預期時間。凡是處理時間的東東全用Time.time 這樣就可以完美讓Time.timeScale控制你的遊戲了。
下面說說兩個大傢伙比較關心的話題。
1.遊戲暫停
設置Time.timeScale = 0;即可讓遊戲暫停。其實我們暫停的主要是人物動畫,還有技能特效,比如一個火球打了一半。 UI方面往往我們不希望暫停,比如暫停界面有一些UI位移動畫或者幀動畫, 或者最起碼要有個“取消暫停的按鈕” 吧。總不能遊戲暫停了我點擊按鈕按鈕的點擊動畫或者特效也暫停了吧。
所有的動畫都是基於時間來的,因為Time.timeScale = 0了,所以Time.time也就不會在變化了。換句話來說如果遊戲暫停以後想在暫停界面上繼續播放一些不受Time.timeScale 影響的動畫,那麼我們就需要用到Time.realtimeSinceStartup
如 果你的項目NGUI的版本還算比較新的話,你會發現在UITweener.cs處理UI動畫的基類裡面已經增加了一個屬性叫public bool ignoreTimeScale = true; 它就是控制控制NGUI 的UI動畫是否受到ignoreTimeScale影響。如下圖所示,你可以看看NGUI在Update裡面的實現,它也是根據時間來判斷的。忽略timescale的話就用真實時間,不忽略的話就用Time.time 和Time.deltaTime。
- 2月 22 週日 201517:48
從JavaScript存取C#
從JavaScript存取C#:
若要從JavaScript去存取C#腳本中的類別(class)或變數(variable),
那麼C#的代碼必須"在JavaScript代碼被編譯之前"就已經存在於編譯器中。
方法:
將C#腳本放置到"Standard Assets"、"Pro Standard Assets"或者"Plugins"文件夾中,
並將JavaScript腳本放置在這三個資料夾以外的地方。
原因:
通常在"Standard Assets"、"Pro Standard Assets"或"Plugins"這三個資料夾中的code,
不管它是(C#、Javascript還是Boo),都會先被編譯,這樣確保在後續編譯步驟中的腳本能夠使用它們
若要從JavaScript去存取C#腳本中的類別(class)或變數(variable),
那麼C#的代碼必須"在JavaScript代碼被編譯之前"就已經存在於編譯器中。
方法:
將C#腳本放置到"Standard Assets"、"Pro Standard Assets"或者"Plugins"文件夾中,
並將JavaScript腳本放置在這三個資料夾以外的地方。
原因:
通常在"Standard Assets"、"Pro Standard Assets"或"Plugins"這三個資料夾中的code,
不管它是(C#、Javascript還是Boo),都會先被編譯,這樣確保在後續編譯步驟中的腳本能夠使用它們
- 2月 12 週四 201512:17
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 四者都可以解釋為將類型轉換為 int,那它們的區別
以前只知道,XXX.Parse(string)只能將string類型轉換為其他類型,而Convert.to...(object)可以轉換的類型較多,沒想到轉換為int型也有那麼多講究..記下一筆..
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 四者都可以解釋為將類型轉換為 int,那它們的區別是什麼呢?
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 四者都可以解釋為將類型轉換為 int,那它們的區別是什麼呢?

