1. 程式人生 > >關於unity3d動畫控制器的一些小工具的寫法

關於unity3d動畫控制器的一些小工具的寫法

一般動作類遊戲的工程目錄一定會有這樣的目錄結構


一般會由策劃或者動畫師把這麼多的動畫拉進一個animator中.是不是這位負責人每次都想淚奔到廁所畫圈圈.今天就是把這麼多步操作簡化成程式一鍵建立。

我用的是unity3d 5.1.1f1

我直接上程式碼吧~

<pre name="code" class="csharp">[MenuItem("Assets/GameTools/AnimTools/CreateAnimator")]
	public static void CreateAnimator()
	{
		string path;
		path = AssetDatabase.GetAssetPath( Selection.activeObject.GetInstanceID ());
		path = path.Replace(".FBX","_animator.controller");
		Debug.Log ("Path is " + path);
		UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath (path);
		AnimatorController ac = AssetDatabase.LoadAssetAtPath<AnimatorController> (path);
		///Get all animclip from dir

		string animclipPath = path.Replace ("/" + ac.name + ".controller", "");
		animclipPath = animclipPath.Replace("Assets","");
		Debug.Log ("AnimclipPath is " + animclipPath);

		string objPath = Application.dataPath + animclipPath;  
		string[] animclipStr;  
		Debug.Log ("objPath is " + objPath);
		//返回指定的目錄中檔案和子目錄的名稱的陣列或空陣列
		animclipStr = System.IO.Directory.GetFileSystemEntries(objPath);   
		AnimationClip clip;
		int animclipCount = 0;
		int attackIndex = 0;
		int otherIndex = 0;
		AnimatorState defaultState = new AnimatorState ();
		bool isDazhaoqianExist = false;
		string idleClipPath = "";
		for (int i = 0; i < animclipStr.Length; i++) 
		{
			if (animclipStr [i].EndsWith (".anim")) {
				animclipCount++;
				animclipPath = animclipStr [i].Replace ("/client", ";");
				string[] pathSplited = animclipPath.Split (';');
				path = pathSplited [1];
				path = path.Remove (0, 1);
				path = path.Replace ('\\', '/');
				Debug.Log ("animclipPath is " + path);
				clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(path);
				Motion m = clip as Motion;
				if(clip.name.Contains(""))

				if(clip.name.Contains("attack") || clip.name.Contains("skill") || clip.name.Contains("bati"))
				{
					ac.layers[0].stateMachine.AddState(clip.name,new Vector3(AttackPosXInAnimator,attackIndex * HeightInAnimator,0)).motion = m;
					attackIndex++;

				}
				else if(clip.name == "idle")
				{
					idleClipPath = AssetDatabase.GetAssetPath(clip.GetInstanceID());
					defaultState = ac.layers[0].stateMachine.AddState(clip.name,new Vector3(OtherPosXInAnimator,otherIndex * HeightInAnimator,0));
					defaultState.motion = m;
					otherIndex++;
				}
				else
				{
					ac.layers[0].stateMachine.AddState(clip.name,new Vector3(OtherPosXInAnimator,otherIndex * HeightInAnimator,0)).motion = m;
					otherIndex++;
				}

			}
		}
		ac.layers [0].stateMachine.defaultState = defaultState;

	}


用法是右擊原模就是那個唯一的fbx.選擇GameTools/AnimTools/CreateAnimator

原理是把被選擇的fbx同目錄字尾為.anim的檔案全部加入到一個新的animatorcontroller裡面。然後以idle為最初始的狀態。

我這裡做了個小處理。把攻擊型技能分到了左邊,狀態類動畫分到右邊。容易分辨。

PS:如果原目錄下有animatorcontroller是會覆蓋掉的。所以如果改了animator中的資料例如:skill1的IKFoot是勾上的。那麼再次CreateAnimator時資料會丟失。需要重新勾選0 0、

相關推薦

關於unity3d動畫控制器一些工具寫法

一般動作類遊戲的工程目錄一定會有這樣的目錄結構 一般會由策劃或者動畫師把這麼多的動畫拉進一個animator中.是不是這位負責人每次都想淚奔到廁所畫圈圈.今天就是把這麼多步操作簡化成程式一鍵建立。 我用的是unity3d 5.1.1f1 我直接上程式碼吧~ <p

分享一些工具 - 自娛自樂

建模 自娛自樂 ltr baidu ++ tex 照片 spa 激活 分享一些小工具 - 自娛自樂 鏈接:http://pan.baidu.com/s/1c2nKLPm 密碼:yusq 說明:001 - Java開發工具 002 - MySQL軟件 003 - Ultra

個人一些工具類庫分享

key logger city 參數 註入 git 參考 tpc 使用 分享一下個人弄的幾個小工具類庫github地址 https://github.com/virtualcca/FoundationLibrary 這幾個小類庫都在我司各大主要系統裏長期運作,效果良好。主要

動手使用ABAP Channel開發一些工具,提升日常工作效率

sed 上一個 排序 實現 觀測 bsp github 時間 平臺 今天的故事要從ABAP小遊戲說起。 中國的ABAP從業者們手頭或多或少都搜集了一些ABAP小遊戲,比如下面這些。 消滅星星: 掃雷: 來自我的朋友劉夢,公眾號"SAP幹貨鋪"裏的俄羅斯方塊: 用ABA

一些工具

1.https://www.processon.com/ 線上uml 2.http://www.pdfdo.com/pdf-to-word.aspx 線上pdf轉word 3.http://www.bootcdn.cn/ js引庫 4.http://patorjk.com/softwar

利用python的圖形介面實現一些工具

import easygui as g import sys import datetime import uuid import socket import psycopg2 import uuid nowTime=datetime.datetime.now

一些好用的工具(1)

文字類 Typora Notepad++ 有道雲筆記 txt wordpad(一般) XMind 有道詞典(神器,不過嚴格來說不屬於文字類) 簡單畫圖 mspaint 截圖 Snipaste(這個強推) PxCook MarkMan(這個一般

Unity3d】介紹兩個實用的UI按鈕工具

平面和遊戲開發中會需要很多的按鈕,UGUI的按鈕使用UnityEvent的話只能響應點選事件,而且如果需要空白按鈕設定Image的alpha值的話有時候會影響fade動畫。這裡介紹兩個工具,一個用來做空白按鈕或者按鈕遮罩,不會佔用額外的drawcall。另一個是

一些java中常用的工具

在java開發中,難免要碰到一些問題會讓自己迷惑,這個時候找朋友問問是個好辦法,google一下也不錯,但有些細節的問題,或者較新的問題從以上兩種途徑不容易找到答案,這個時候有些工具是能幫助你解決問題的。javap ,反編譯java class 成位元組碼,能解決很多J

iOS中CoreAnimation的一些問題 animationDidStop確認哪個動畫結束 和 連續animation之間的動畫不連續閃現

最近專案需要我來實現一些UILabel UIView等的動畫效果。 專案中遇到了兩個比較基礎的問題,一個問題是如何在設定了動畫的delegate為自己後,在animationDidStop中確認是哪一個動畫的技術,好在對應的動畫結束後開始新的動畫。晚上的問題千篇一律的都是

20.給UITextField新增一些動畫, 增強UI介面的趣味

現在又很多軟體為了吸引更多的使用者量, 使用了各種各樣炫的動畫效果, 我們也不能落下, 所以我們也要給我們的UI介面新增一些趣味, 讓我們來看看吧. 1.佈局介面 2.自定義UITextField PS: 在這之前, 我們需要建立一個C

windows從cmd中鍵入命令的一些常用工具

Desk.cpl:顯示 Intl.cpl:區域語言選項 Joy.cpl:遊戲控制器 Main.cpl:滑鼠 Mlcfg.cpl:郵件 Mmsys.cpl:聲音和音訊裝置 Ncpa.cpl:網路連線 Powercfg.cpl:電源管理 Sysd

寫的一個UGUI下Image控制元件做序列幀動畫工具

unity2D使用序列幀做動畫,一般都用2d SpriteRenderer,它的好處是能夠沿用圖片原有的大小和錨點。特別是我們使用TexturePacker打圖集的時候並且Trim邊緣空白的時候,可以直接使用它,而不用在程式中調整它的位置等資訊。 然而我們如果

使用node.js開發一個生成逐幀動畫工具

在實際工作中我們已經下下來不下於一萬個npm包了,像我們熟悉的 vue-cli,react-native-cli 等,只需要輸入簡單的命令 vue init webpack project,即可快速幫我們生成一個初始專案。在實際開發專案中,我們也可以定製一個屬於自己的npm包,來

Liferay 7 OSGi的一些技巧

liferay packages res ges shell portlet 依賴 include log 如果部署一個portlet到Liferay上,編譯沒有出現任何錯誤,卻提示有沒有解決的依賴,可能出現的問題是,我們這個portlet所需要的這個jar包在這個OSGi

Linux下目錄快速切換工具bd

bd假設現在所處的目錄路徑為:/tmp/ab/bc/cd/de/ef/fg/ab/zz/xx/yy,如何快速切換到ef目錄?通常使用cd命令進行目錄切換,比較繁瑣,此時可以使用bd工具一、安裝bd:# wget --no-check-certificate -O /usr/bin/bd https://raw

拾遺:shell 技巧之 yes 工具

過去 分享 選項 命令執行 images 調用 shel log http 當需要在腳本中自動回答 ‘yes‘ 或 ‘no‘ 等選項時,就可以調用 yes 小工具,語法如下: 如(對於管道後面的命令執行過程中提出的每個詢問,都發送定制的內容 no 過去):   yes n

python工具:用python操作HP的Quality Center

over cti 步驟 response headers 服務器 登錄 chm format 背景是這樣的:這個組的測試人員每跑一個case都要上傳測試結果附件到QC。每個待測功能模塊可能包含幾十上百的case。於是手工上傳測試結果變成了繁重的體力勞動。令人驚訝的是我們的工

一些知識點記錄

absolute www 什麽是 目的 定位元素 小知識點 pos 布局 z-index 1.什麽是文檔流? 回答1:文檔流是文檔中可顯示對象在排列時所占用的位置。比如網頁的div標簽它默認占用的寬度位置是一整行,p標簽默認占用寬度也是一整行,因為div標簽和p標簽是塊狀對

python工具 - alert彈框輸出姓名年齡、求和

sum entry 數字 之間 col import 技術分享 app button 使用python自帶的tkinter庫進行GUI編程,完成兩個功能: (1)要求用戶輸入姓名和年齡然後打印出來 (2)要求用戶輸入一個數字,然後計算1到該數字之間的和 代碼部分: # 導