• unity3d 移动与旋转 2


    这次的代码示例是配合动画系统使用的

    4.3新的动画系统允许动画带有位置偏移,只需要在Animator组件中勾选Apply Root Motion我们就可以使用它了。

    using UnityEngine;
    using System.Collections;
    
    public class DonePlayerMovement : MonoBehaviour
    {
        public AudioClip shoutingClip;        // Audio clip of the player shouting.
        public float turnSmoothing = 15f;    // A smoothing value for turning the player.
        public float speedDampTime = 0.1f;    // The damping for the speed parameter
        
        
        private Animator anim;                // Reference to the animator component.
        private DoneHashIDs hash;            // Reference to the HashIDs.
        
        
        void Awake ()
        {
            // Setting up the references.
            anim = GetComponent<Animator>();
            hash = GameObject.FindGameObjectWithTag(DoneTags.gameController).GetComponent<DoneHashIDs>();
            
            // Set the weight of the shouting layer to 1.
            anim.SetLayerWeight(1, 1f);
        }
        
        
        void FixedUpdate ()
        {
            // Cache the inputs.
            float h = Input.GetAxis("Horizontal");
            float v = Input.GetAxis("Vertical");
            bool sneak = Input.GetButton("Sneak");
            
            MovementManagement(h, v, sneak);
        }
        
        
        void Update ()
        {
            // Cache the attention attracting input.
            bool shout = Input.GetButtonDown("Attract");
            
            // Set the animator shouting parameter.
            anim.SetBool(hash.shoutingBool, shout);
            
            AudioManagement(shout);
        }
        
        
        void MovementManagement (float horizontal, float vertical, bool sneaking)
        {
            // Set the sneaking parameter to the sneak input.
            anim.SetBool(hash.sneakingBool, sneaking);
            
            // If there is some axis input...
            if(horizontal != 0f || vertical != 0f)
            {
                // ... set the players rotation and set the speed parameter to 5.5f.
                Rotating(horizontal, vertical);
                anim.SetFloat(hash.speedFloat, 5.5f, speedDampTime, Time.deltaTime);
            }
            else
                // Otherwise set the speed parameter to 0.
                anim.SetFloat(hash.speedFloat, 0);
        }
        
        
        void Rotating (float horizontal, float vertical)
        {
            // Create a new vector of the horizontal and vertical inputs.
            Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
            
            // Create a rotation based on this new vector assuming that up is the global y axis.
            Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up);
            
            // Create a rotation that is an increment closer to the target rotation from the player's rotation.
            Quaternion newRotation = Quaternion.Lerp(rigidbody.rotation, targetRotation, turnSmoothing * Time.deltaTime);
            
            // Change the players rotation to this new rotation.
            rigidbody.MoveRotation(newRotation);
        }
        
        
        void AudioManagement (bool shout)
        {
            // If the player is currently in the run state...
            if(anim.GetCurrentAnimatorStateInfo(0).nameHash == hash.locomotionState)
            {
                // ... and if the footsteps are not playing...
                if(!audio.isPlaying)
                    // ... play them.
                    audio.Play();
            }
            else
                // Otherwise stop the footsteps.
                audio.Stop();
            
            // If the shout input has been pressed...
            if(shout)
                // ... play the shouting clip where we are.
                AudioSource.PlayClipAtPoint(shoutingClip, transform.position);
        }
    }
  • 相关阅读:
    采用[ICONIX] 方法实践BLOG设计之一 [问题域建模]
    关于“三国众谋士”之IT从业可行性报告
    采用[ICONIX] 方法实践BLOG设计之二 [用例建模]
    NET框架中的 Decorator 和 Strategy 模式
    域模型向左走(充血),向右走(贫血)
    采用[ICONIX] 方法实践BLOG设计之五 [初步设计复核]
    Discuz!NT 缓存设计简析 [原创]
    Discuz!NT控件剖析 之 Tab 属性页 [原创: 附源码]
    没有银弹,但可以"扯蛋"
    Discuz!NT控件剖析 之 Button [原创: 附源码]
  • 原文地址:https://www.cnblogs.com/88999660/p/3710577.html
Copyright © 2020-2023  润新知