Unity生命周期函数详解

Unity生命周期函数详解

Unity生命周期函数是Unity引擎中用于控制游戏对象行为的一系列方法。它们在游戏的不同阶段被自动调用,允许开发者在适当的时机执行特定的代码。了解和正确使用生命周期函数对于创建流畅和高效的游戏至关重要。

生命周期函数概述

Unity生命周期函数分为几个主要类别,包括:

  • 初始化函数:在游戏对象首次创建时调用。
  • 更新函数:在每一帧被调用,用于处理游戏逻辑和物理。
  • 渲染函数:在渲染每一帧时调用,用于处理图像渲染。
  • 事件处理函数:响应用户输入和游戏事件。
  • 销毁函数:在游戏对象被销毁时调用。

主要生命周期函数详解

Awake

Awake 是Unity中最早被调用的生命周期函数之一,它在游戏对象被实例化后立即执行,并且只会执行一次。这个函数通常用于初始化变量和注册事件监听器。

void Awake() {
    // 初始化代码
}

Start

Start 函数在所有Awake函数执行完毕后调用,同样只会执行一次。与Awake不同,Start可以被用来调用其他游戏对象的Awake函数,这在需要跨对象通信时非常有用。

void Start() {
    // 启动代码
}

Update

Update 是Unity中的核心生命周期函数,它在每一帧结束后被调用。这个函数用于处理游戏逻辑,如移动、碰撞检测和输入响应。

void Update() {
    // 每帧更新的代码
}

FixedUpdate

FixedUpdate 与Update类似,但它以固定时间步长被调用,不受帧率影响。这使得它非常适合处理物理和需要精确时间控制的逻辑。

void FixedUpdate() {
    // 固定时间步长更新的代码
}

LateUpdate

LateUpdate 在所有Update和FixedUpdate函数执行完毕后调用。它可以用来执行那些需要在所有其他更新之后发生的操作,如摄像机跟随。

void LateUpdate() {
    // 延迟更新的代码
}

OnDestroy

OnDestroy 在游戏对象被销毁之前调用,是清理资源和注销事件监听器的理想位置。

void OnDestroy() {
    // 销毁前的清理代码
}

使用生命周期函数的最佳实践

  • 避免在Awake中调用其他游戏对象的Awake:这可能导致初始化顺序问题。
  • 使用Update进行逻辑处理:如移动和输入响应。
  • 使用FixedUpdate进行物理处理:如刚体的力和速度更新。
  • 在OnDestroy中清理资源:如注销事件监听器和释放资源。

Unity脚本所有生命周期函数


void Update()
{
    //当MonoBehaviour启用时,其Update在每一帧被调用。
}

void LateUpdate()
{

    //当Behaviour启用时,其LateUpdate在每一帧被调用。

}
void FixedUpdate()
{

    //当MonoBehaviour启用时,其 固定时间调用一次

}

void Awake()
{

    //当一个脚本实例被载入时Awake被调用。

}

void Start()
{

    //Start仅在Update函数第一次被调用前调用。


}

void Reset()
{

    //重置为默认值。

}

void OnMouseEnter()
{

    //当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。

}

void OnMouseOver()
{

    //当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .

}

void OnMouseExit()
{

    //当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。

}

void OnMouseDown()
{

    //当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。
}



void OnMouseUp()
{

    //当用户释放鼠标按钮时调用OnMouseUp。

}

void OnMouseUpAsButton()
{

    //OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。

}

void OnMouseDrag()
{

    //当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。

}

void OnTriggerEnter()
{

    //当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

}

void OnTriggerExit()
{

    //当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。


}
void OnTriggerStay()
{

    //当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

}

void OnCollisionEnter()
{

    //当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。

}

void OnCollisionExit()
{

    //当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
}


void OnCollisionStay()
{

    //当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

}

void OnControllerColliderHit()
{

    //在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。


}
void OnJointBreak()
{

    //当附在同一对象上的关节被断开时调用。

}

void OnParticleCollision()
{

    //当粒子碰到collider时被调用。

}

void OnBecameVisible()
{

    //当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。

}

void OnBecameInvisible()
{

    //当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。

}

void OnLevelWasLoaded()
{

    //当一个新关卡被载入时此函数被调用。


}
void OnEnable()
{

    //当对象变为可用或激活状态时此函数被调用。
}


void OnDisable()
{

    //当对象变为不可用或非激活状态时此函数被调用。

}

void OnDestroy()
{

    //当MonoBehaviour将被销毁时,这个函数被调用。


}
void OnPreCull()
{

    //在相机消隐场景之前被调用。
}


void OnPreRender()
{

    //在相机渲染场景之前被调用。
}


void OnPostRender()
{

    //在相机完成场景渲染之后被调用。

}

void OnRenderObject()
{

    //在相机场景渲染完成后被调用。
}


void OnWillRenderObject()
{

    //如果对象可见每个相机都会调用它。
}


void OnGUI()
{

    //渲染和处理GUI事件时调用。
}


void OnDrawGizmosSelected()
{

    //如果你想在物体被选中时绘制gizmos,执行这个函数。

}

void OnDrawGizmos()
{

    //如果你想绘制可被点选的gizmos,执行这个函数。

}

void OnApplicationPause()
{

    //当玩家暂停时发送到所有的游戏物体。
}


void OnApplicationFocus()
{

    //当玩家获得或失去焦点时发送给所有游戏物体。

}

void OnApplicationQuit()
{

    //在应用退出之前发送给所有的游戏物体。

}

void OnPlayerConnected()
{

    //当一个新玩家成功连接时在服务器上被调用。
}


void OnServerInitialized()
{

    //当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。

}

void OnConnectedToServer()
{

    //当你成功连接到服务器时,在客户端调用。

}

void OnPlayerDisconnected()
{

    //当一个玩家从服务器上断开时在服务器端调用。

}

void OnDisconnectedFromServer()
{

    //当失去连接或从服务器端断开时在客户端调用。

}

void OnFailedToConnect()
{

    //当一个连接因为某些原因失败时在客户端调用。

}


void OnFailedToConnectToMasterServer()
{

    //当报告事件来自主服务器时在客户端或服务器端调用。
}


void OnMasterServerEvent()
{

    //当报告事件来自主服务器时在客户端或服务器端调用。

}

Unity中文API参考手册完整版下载

Unity API参考手册是Unity开发者的宝贵资源,它提供了Unity引擎中所有类、接口、结构体、枚举和委托的详细文档。这份手册对于理解Unity的内部工作原理、使用Unity提供的各种功能以及扩展Unity的能力至关重要。
Unity圣典
Unity圣典
链接:https://pan.baidu.com/s/1S6Ezqou2i8Z4NpWrffii7g?pwd=umms
提取码:umms

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值