您的位置:首页 > 科技 > 能源 > 陕西工程建设标准化信息网_重庆杂酱制作_网站优化外包_关键词排名关键词快速排名

陕西工程建设标准化信息网_重庆杂酱制作_网站优化外包_关键词排名关键词快速排名

2025/1/5 6:58:22 来源:https://blog.csdn.net/renxi0/article/details/144816988  浏览:    关键词:陕西工程建设标准化信息网_重庆杂酱制作_网站优化外包_关键词排名关键词快速排名
陕西工程建设标准化信息网_重庆杂酱制作_网站优化外包_关键词排名关键词快速排名

在 Unity 和 C# 中,有一些相对不常见但非常有用的类型,可以用来实现特殊功能。比如 Flags 属性和其他一些较少用的类型。


1. Flags 枚举(Flags Attribute)

Flags 是一种特殊的枚举,用于表示二进制标志组合,非常适合用作位掩码(Bit Mask)。

使用场景:
  • 表示多个布尔值的组合状态。
  • 用按位操作(|&)进行状态管理。
示例:
[System.Flags]
public enum GameState
{None = 0,          // 0000Playing = 1 << 0,  // 0001Paused = 1 << 1,   // 0010GameOver = 1 << 2, // 0100Victory = 1 << 3   // 1000
}public class GameManager : MonoBehaviour
{public GameState currentState;void Start(){currentState = GameState.Playing | GameState.Paused; // 设置多个状态Debug.Log(currentState); // 输出 "Playing, Paused"if ((currentState & GameState.Playing) != 0){Debug.Log("Game is currently playing.");}}
}

2. ScriptableObject

ScriptableObject 是 Unity 中一种特殊的类类型,用于保存共享的数据。它的实例存储在独立的资产文件中,常用于配置数据或跨场景共享数据。

示例:
[CreateAssetMenu(fileName = "NewGameData", menuName = "Game Data")]
public class GameData : ScriptableObject
{public string playerName;public int highScore;
}public class GameManager : MonoBehaviour
{public GameData gameData;void Start(){Debug.Log($"Player Name: {gameData.playerName}, High Score: {gameData.highScore}");}
}

3. YieldInstructionCustomYieldInstruction

这两种类型用于实现自定义的协程行为,尤其是 CustomYieldInstruction,可以帮助创建复杂的协程等待逻辑。

示例:
public class WaitForCondition : CustomYieldInstruction
{private System.Func<bool> condition;public WaitForCondition(System.Func<bool> condition){this.condition = condition;}public override bool keepWaiting => !condition();
}public class Example : MonoBehaviour
{private bool isReady = false;IEnumerator Start(){yield return new WaitForCondition(() => isReady);Debug.Log("Condition met!");}void Update(){if (Input.GetKeyDown(KeyCode.Space)){isReady = true;}}
}

4. EventGUIStyle

这两个类型主要用于 Unity 的 IMGUI 系统,在处理低级事件或绘制自定义编辑器工具时非常有用。

示例(处理鼠标事件):
void OnGUI()
{Event e = Event.current;if (e.type == EventType.MouseDown){Debug.Log($"Mouse Clicked at: {e.mousePosition}");}
}

5. WaitForSecondsRealtime

WaitForSeconds 类似,但忽略 TimeScale 的影响(即不受暂停或加速影响)。

示例:
IEnumerator Start()
{Debug.Log("Waiting for 3 seconds (real time)...");yield return new WaitForSecondsRealtime(3);Debug.Log("Done!");
}

6. Matrix4x4

一个 4x4 的矩阵,用于高级数学运算,尤其是在自定义的图形变换或着色器中。

示例:
void Start()
{Matrix4x4 matrix = Matrix4x4.TRS(Vector3.one, Quaternion.identity, Vector3.one);Debug.Log(matrix);
}

这些类型虽然不常见,但在需要时能极大地提升代码的灵活性和效率,特别是在处理复杂功能或优化工作流时。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com