Unity的AssetPostprocessor?Model動(dòng)畫(huà)函數(shù)使用案例深究
Unity AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改實(shí)際應(yīng)用
在Unity中,AssetPostprocessor是一個(gè)非常有用的工具,它可以在導(dǎo)入資源時(shí)自動(dòng)執(zhí)行一些操作。其中,Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改可以幫助我們?cè)趯?dǎo)入模型時(shí)自動(dòng)修改動(dòng)畫(huà)相關(guān)的函數(shù),從而提高我們的工作效率。本文將介紹如何使用AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改,并提供多個(gè)使用例子。
什么是AssetPostprocessor
AssetPostprocessor是Unity中的一個(gè)類(lèi),它可以在導(dǎo)入資源時(shí)自動(dòng)執(zhí)行一些操作。我們可以通過(guò)繼承AssetPostprocessor并重寫(xiě)其中的方法來(lái)實(shí)現(xiàn)自己的需求。其中,Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改是AssetPostprocessor中的一個(gè)功能,它可以幫助我們?cè)趯?dǎo)入模型時(shí)自動(dòng)修改動(dòng)畫(huà)相關(guān)的函數(shù)。
Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改
在Unity中,我們可以通過(guò)Animator組件來(lái)控制模型的動(dòng)畫(huà)。Animator組件中包含了一些動(dòng)畫(huà)相關(guān)的函數(shù),例如SetBool、SetFloat、SetInteger等。這些函數(shù)可以幫助我們控制動(dòng)畫(huà)的播放。在導(dǎo)入模型時(shí),我們可以通過(guò)AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改來(lái)自動(dòng)修改這些函數(shù)。
修改SetBool函數(shù)
我們可以通過(guò)修改SetBool函數(shù)來(lái)控制動(dòng)畫(huà)的播放。例如,我們可以在導(dǎo)入模型時(shí)自動(dòng)將所有的SetBool函數(shù)中的參數(shù)名“isRunning”改為“isWalking”,從而控制動(dòng)畫(huà)的播放。具體實(shí)現(xiàn)如下:
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor : AssetPostprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Bool)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetBool" && e.stringParameter == "isRunning")
{
e.stringParameter = "isWalking";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}修改SetFloat函數(shù)
我們也可以通過(guò)修改SetFloat函數(shù)來(lái)控制動(dòng)畫(huà)的播放。例如,我們可以在導(dǎo)入模型時(shí)自動(dòng)將所有的SetFloat函數(shù)中的參數(shù)名“speed”改為“velocity”,從而控制動(dòng)畫(huà)的播放。具體實(shí)現(xiàn)如下:
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor : AssetPostprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Float)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetFloat" && e.stringParameter == "speed")
{
e.stringParameter = "velocity";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}修改SetInteger函數(shù)
我們還可以通過(guò)修改SetInteger函數(shù)來(lái)控制動(dòng)畫(huà)的播放。例如,我們可以在導(dǎo)入模型時(shí)自動(dòng)將所有的SetInteger函數(shù)中的參數(shù)名“state”改為“status”,從而控制動(dòng)畫(huà)的播放。具體實(shí)現(xiàn)如下
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor : AssetPostprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Int)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetInteger" && e.stringParameter == "state")
{
e.stringParameter = "status";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}使用例子
下面是幾個(gè)使用AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改的例子。
例子1:修改SetBool函數(shù)
我們可以在導(dǎo)入模型時(shí)自將所有的SetBool函數(shù)中的參數(shù)名“isRunning”改為“isWalking”,從而控制動(dòng)畫(huà)的播放。具體實(shí)現(xiàn)如下:
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor : AssetPostprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Bool)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetBool" && e.stringParameter == "isRunning")
{
e.stringParameter = "isWalking";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}例子2:修改SetFloat函數(shù)
我們可以在導(dǎo)入模型時(shí)自動(dòng)將所有的SetFloat函數(shù)中的參數(shù)名“speed”改為“velocity”,從而控制動(dòng)畫(huà)的播放。具體現(xiàn)如下:
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor : AssetPostprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Float)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetFloat" && e.stringParameter == "speed")
{
e.stringParameter = "velocity";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}例子3:修改SetInteger函數(shù)
我們可以在導(dǎo)入模型時(shí)自動(dòng)將所有的SetInteger函數(shù)中的參數(shù)名“state”改為“status”,從而控制動(dòng)畫(huà)的播放。具體實(shí)現(xiàn)如下:
using UnityEngine;
using UnityEditor;
public class ModelPostprocessor :Postprocessor
{
void OnPostprocessModel(GameObject go)
{
Animator animator = go.GetComponent<Animator>();
if (animator != null)
{
AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
if (controller != null)
{
foreach (AnimatorControllerParameter parameter in controller.parameters)
{
if (parameter.type == AnimatorControllerParameterType.Int)
{
foreach (AnimationClip clip in controller.animationClips)
{
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clip);
foreach (AnimationEvent e in events)
{
if (e.functionName == "SetInteger" && e.stringParameter == "state")
{
e.stringParameter = "status";
AnimationUtility.SetAnimationEvents(clip, events);
}
}
}
}
}
}
}
}
}總結(jié)
本文介紹了如何使用AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改,并提供了多個(gè)使用例子。通過(guò)使用AssetPostprocessor的Model的動(dòng)畫(huà)相關(guān)的函數(shù)修改,我們可以在導(dǎo)入模型時(shí)自動(dòng)修改畫(huà)相關(guān)的函數(shù),從而提高我們的工作效率。
更多關(guān)于Unity AssetPostprocessor Model動(dòng)畫(huà)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
對(duì)int array進(jìn)行排序的實(shí)例講解
下面小編就為大家分享一篇對(duì)int array進(jìn)行排序的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
unity自帶尋路(導(dǎo)航)系統(tǒng) Nav Mesh導(dǎo)航網(wǎng)格
這篇文章主要為大家詳細(xì)介紹了unity自帶尋路(導(dǎo)航)系統(tǒng),Nav Mesh導(dǎo)航網(wǎng)格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C#實(shí)現(xiàn)復(fù)制數(shù)據(jù)庫(kù) C#將A數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)到B數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了C#復(fù)制數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)到另一個(gè)數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
如何使用Dapper處理多個(gè)結(jié)果集與多重映射實(shí)例教程
Dapper類(lèi)是一個(gè)開(kāi)源的數(shù)據(jù)庫(kù)操作類(lèi),下面這篇文章主要給大家介紹了關(guān)于如何使用Dapper處理多個(gè)結(jié)果集與多重映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Unity接入百度AI實(shí)現(xiàn)貨幣識(shí)別
本文主要介紹了在Unity中接入百度AI,從而實(shí)現(xiàn)貨幣識(shí)別,可以返回貨幣的名稱(chēng)、代碼、面值、年份信息等,感興趣的可以跟隨小編學(xué)習(xí)一下2022-01-01

