Rider编辑器的实时模板
实时模板可以有效增加开发效率
模板存放位置:
C:\Users\user\AppData\Roaming\JetBrains\Rider
记录自己编写的几个实时模板
/// <summary>
/// Awake 函数会在游戏对象被实例化之后立即调用,而且在所有对象的 Start 函数调用之前执行。一般在 Awake 函数里进行以下操作:
/// <para>1. 初始化引用:查找并存储对其他组件或者游戏对象的引用,确保后续代码能够方便地访问这些对象。</para>
/// <para>2. 初始化设置:对脚本中的变量进行初始赋值。</para>
/// <para>3. 建立连接:比如和数据库或者网络服务建立连接。</para>
/// </summary>
private void Awake()
{
$END$
}
/// <summary>
/// OnEnable 函数会在对象被启用时调用。函数在对象的生命周期中可能会被多次调用,只要对象被启用一次,它就会执行一次;而 Awake 只在对象实例化后调用一次,Start 只在第一帧更新前调用一次。
/// <para>1. 注册事件:当你需要在对象启用时注册一些事件监听器,就可以在 OnEnable 函数中完成。这样在对象被启用后,就能及时响应相应的事件。</para>
/// <para>2. 资源重置:如果对象在禁用时某些状态或者资源被改变,在启用时需要将其重置为初始状态,就可以在 OnEnable 里实现。</para>
/// <para>3. 初始化临时数据:对于一些只在对象启用期间有效的临时数据,可以在 OnEnable 中进行初始化。</para>
/// </summary>
private void OnEnable()
{
$END$
}
/// <summary>
/// Start 函数会在脚本实例被启用时调用,并且只在第一帧更新之前执行一次。它一般用于:
/// <para>1. 依赖初始化:当某些初始化操作依赖于其他对象的 Awake 函数完成时,可以在 Start 函数里进行。</para>
/// <para>2. 数据加载:从文件或者服务器加载数据。</para>
/// </summary>
private void Start()
{
$END$
}
/// <summary>
/// OnDestroy 函数会在以下几种情况下被调用:
/// <para>1. 当你使用 GameObject.Destroy 方法明确销毁一个游戏对象时,OnDestroy 会在销毁操作执行前被调用。</para>
/// <para>2. 当场景切换时,如果某个游戏对象没有设置为 DontDestroyOnLoad,那么在场景切换过程中该对象被销毁时,OnDestroy 也会被触发。</para>
/// <para>3. 当游戏结束或应用程序关闭时,所有存在的游戏对象都会被销毁,此时也会调用它们各自的 OnDestroy 函数。</para>
/// OnDestroy 函数适用的场景:
/// <para>1. 资源释放:当游戏对象持有一些外部资源,如网络连接、文件句柄、数据库连接等,在对象销毁时需要确保这些资源被正确释放,避免资源泄漏。</para>
/// <para>2. 事件注销:如果在 OnEnable 或者其他地方注册了事件监听器,为了防止出现内存泄漏,需要在 OnDestroy 中注销这些事件监听器。</para>
/// <para>3. 数据保存:在对象销毁前,可能需要将对象的一些状态数据保存到文件或者服务器,以便后续恢复或分析。</para>
/// </summary>
private void OnDestroy()
{
$END$
}
/// <summary>
/// 当游戏对象的 SetActive(false) 方法被调用,或者脚本组件的 enabled 属性被设置为 false 时,OnDisable 函数就会被触发执行。另外,当游戏对象被销毁时,在销毁之前也会先调用 OnDisable 函数。和 OnEnable 一样,OnDisable 在对象的生命周期中也可能会被多次调用,只要对象被禁用一次,该函数就会执行一次。
/// <para>1. 注销事件:如果在 OnEnable 里注册了事件监听器,为避免出现内存泄漏问题,就需要在 OnDisable 中注销这些事件监听器。</para>
/// <para>2. 保存数据:在对象被禁用时,可以将对象的状态或数据保存到文件、数据库或者其他持久化存储中。</para>
/// <para>3. 释放资源:若对象在启用期间占用了一些资源,像网络连接、文件句柄等,在禁用时需要释放这些资源。</para>
/// </summary>
private void OnDisable()
{
$END$
}
/// <summary>
/// OnApplicationQuit 是一个特殊的事件函数,它会在应用程序即将退出时被调用。
/// <para>1. 当用户关闭游戏窗口时。</para>
/// <para>2. 在编辑器中停止播放模式时。</para>
/// <para>3. 在移动设备上,当应用程序被关闭时。</para>
/// OnApplicationQuit 函数适用的场景:
/// <para>1. 数据保存:在应用程序退出前,保存游戏的进度、玩家的设置或者其他重要数据,以便下次启动时可以恢复。</para>
/// <para>2. 资源释放:关闭所有打开的文件、网络连接或者释放其他占用的系统资源,防止数据丢失或资源泄漏。</para>
/// <para>3. 日志记录:记录应用程序退出时的相关信息,如当前游戏状态、玩家的操作等,方便后续分析。</para>
/// </summary>
private void OnApplicationQuit()
{
$END$
}
一个完整的示例:
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
private Rigidbody rb;
private int score;
// Awake函数在对象实例化后立即调用
void Awake()
{
// 查找并存储对刚体组件的引用
rb = GetComponent<Rigidbody>();
if (rb == null)
{
Debug.LogError("未找到刚体组件!");
}
// 初始化变量
score = 0;
Debug.Log("Awake函数执行,刚体引用已获取,分数已初始化为0。");
}
// OnEnable函数在对象启用时调用
void OnEnable()
{
// 注册事件监听器
GameManager.OnScoreChanged += UpdateScore;
Debug.Log("OnEnable函数执行,事件监听器已注册。");
// 重置资源
if (rb != null)
{
rb.velocity = Vector3.zero;
Debug.Log("刚体速度已重置为零。");
}
}
// Start函数在第一帧更新之前调用
void Start()
{
// 可以在这里进行依赖于其他对象Awake函数的初始化操作
if (rb != null)
{
rb.useGravity = true;
Debug.Log("Start函数执行,刚体已启用重力。");
}
// 模拟从文件或服务器加载数据
LoadData();
}
// 事件处理函数
void UpdateScore(int newScore)
{
score = newScore;
Debug.Log("分数已更新为: " + score);
}
void LoadData()
{
// 这里可以添加实际的数据加载逻辑
Debug.Log("数据加载完成。");
}
// OnDisable函数在对象禁用时调用
void OnDisable()
{
// 注销事件监听器
GameManager.OnScoreChanged -= UpdateScore;
Debug.Log("OnDisable函数执行,事件监听器已注销。");
// 保存数据
SaveData();
}
// OnDestroy函数在对象销毁时调用
void OnDestroy()
{
// 释放资源,例如关闭网络连接等
Debug.Log("OnDestroy函数执行,资源已释放。");
// 再次确认注销事件监听器(虽然OnDisable中已经做了,但这里是双重保险)
GameManager.OnScoreChanged -= UpdateScore;
}
void SaveData()
{
// 这里可以添加实际的数据保存逻辑
Debug.Log("数据已保存。");
}
}
// 模拟一个游戏管理类
public static class GameManager
{
public static event System.Action<int> OnScoreChanged;
public static void ChangeScore(int newScore)
{
if (OnScoreChanged != null)
{
OnScoreChanged(newScore);
}
}
}