c# - 如何使用字典使 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);
}
解决方案
公平的警告,我不知道你在做什么是否有意义,因为我的统一知识有限。
但是,我将使用的数据结构是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);
推荐阅读
- asp.net-core - 尝试使用 Ws-Fed 对 ASPNET Core MVC 应用程序进行身份验证时出现 SecurityTokenException
- java - codechef 上的第一个 Java 解决方案给 NZEC
- hive - Hive Concat 功能在 Beeline 中不起作用
- java - Neo4j - java 身份验证失败
- php - 找不到 Symfony 4 路由
- flutter - 如何在焦点上更改 Flutter TextField 边框颜色?
- android - 针对 Xamarin Android 上的 64 位架构
- r - 如何使用 for 循环变量作为 csv 文件名的一部分来编写许多 csv 文件?
- python-2.7 - 有没有快速将图像转换为 WEBP 的方法?
- c++ - 我可以用 std::enable_if 摆脱模板专业化吗?