美文网首页
Unity3D中的Update、LateUpdate和Fixed

Unity3D中的Update、LateUpdate和Fixed

作者: 醉杀楚天白 | 来源:发表于2017-12-31 10:40 被阅读0次
    1. MonoBehaviour.Update 更新
      当MonoBehaviour启用时,其Update在每一帧被调用。

      例如 让一个物体稳定转动

    using UnityEngine;
    using System.Collections;
    
    public class Rotator : MonoBehaviour {
    
        // Before rendering each frame..
        void Update () 
        {
            // Rotate the game object that this script is attached to by 15 in the X axis,
            // 30 in the Y axis and 45 in the Z axis, multiplied by deltaTime in order to make it per second
            // rather than per frame.
            transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
        }
    }
    
    1. MonoBehaviour.FixedUpdate 固定更新

      当MonoBehaviour启用时,其 FixedUpdate在每一帧被调用。

      处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧(两者帧长不同)。

      例如: 给刚体加力

        void FixedUpdate ()
        {
            // Set some local float variables equal to the value of our Horizontal and Vertical Inputs
            float moveHorizontal = Input.GetAxis ("Horizontal");
            float moveVertical = Input.GetAxis ("Vertical");
    
            // Create a Vector3 variable, and assign X and Z to feature our horizontal and vertical float variables above
            Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
    
            // Add a physical force to our Player rigidbody using our 'movement' Vector3 above, 
            // multiplying it by 'speed' - our public player speed that appears in the inspector
            rb.AddForce (movement * speed);
        }
    
    1. MonoBehaviour.LateUpdate 晚于更新

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

      例如 : 摄像机跟随玩家移动

    using UnityEngine;
    using System.Collections;
    
    public class CameraController : MonoBehaviour {
    
       // store a public reference to the Player game object, so we can refer to it's Transform
       public GameObject player;
    
       // Store a Vector3 offset from the player (a distance to place the camera from the player at all times)
       private Vector3 offset;
    
       // At the start of the game..
       void Start ()
       {
           // Create an offset by subtracting the Camera's position from the player's position
           offset = transform.position - player.transform.position;
       }
    
       // After the standard 'Update()' loop runs, and just before each frame is rendered..
       void LateUpdate ()
       {
           // Set the position of the Camera (the game object this script is attached to)
           // to the player's position, plus the offset amount
           transform.position = player.transform.position + offset;
       }
    }
    

    相关文章

      网友评论

          本文标题:Unity3D中的Update、LateUpdate和Fixed

          本文链接:https://www.haomeiwen.com/subject/rxmogxtx.html