首页 > 解决方案 > 如何使用字典使 C# 中的代码整洁以用于统一脚本

问题描述

这是我统一的动画控制器代码,工作正常,但表明它只是一遍又一遍地重复自己来更改一些变量。我的问题是是否有办法在 C# 中制作字典以减少重复性。我想应该有一种方法,但由于我是 c# 的新手,我将不胜感激

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class anim : MonoBehaviour
{
    [SerializeField] private Animator animator = null;


    private static readonly int hashHappy = Animator.StringToHash("happy");
    private static readonly int hashSad = Animator.StringToHash("sad");

    
    void Update()
     {
         if(Input.GetKey(KeyCode.H))
         {

             animator.SetBool(hashHappy, true);
             animator.SetBool(hashSad, false);

         } else if (Input.GetKeyUp(KeyCode.H))
         {
             Invoke("finishHappy", 5f);
           
         }

         if(Input.GetKey(KeyCode.S)){

             animator.SetBool(hashHappy, false);
             animator.SetBool(hashSad, true);

         } else if (Input.GetKeyUp(KeyCode.S))
         {
             Invoke("finishSad", 5f);
           
         }





        

     }

     public void finishHappy()=>animator.SetBool(hashHappy, false);
     public void finishSad()=>animator.SetBool(hashSad, false);

 
        
   


}

标签: c#unity3d

解决方案


公平的警告,我不知道你在做什么是否有意义,因为我的统一知识有限。

但是,我将使用的数据结构是List<T>. 这将允许您遍历它的哈希并切换动画

给定

public static class SomeClass
{
   private static readonly int hashHappy = Animator.StringToHash("happy");
   private static readonly int hashClap = Animator.StringToHash("clap");
   private static readonly int hashSad = Animator.StringToHash("sad");
   private static readonly int hashAngry = Animator.StringToHash("angry");
   private static readonly int hashDance = Animator.StringToHash("dance");
   private static readonly int hashDie = Animator.StringToHash("die");

   privatestatic List<int> _hashes;

   static SomeClass()
   {
      _hashes = new List<int>() {hashHappy, hashClap, hashSad, hashAngry, hashDance, hashDie};
   }

   public static void Set(Animator animator, int hash)
   {
      foreach (var item in _hashes)
         animator.SetBool(hash, item == hash);
   }
}

用法

if(Input.GetKey(KeyCode.H))
   SomeClass.Set(animator, hashHappy);
if(Input.GetKey(KeyCode.C)) 
   SomeClass.Set(animator, hashClap);

推荐阅读