zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    jQuery.fn.extend与jQuery.extend到底区别在哪?
    近来随想
    利用less监视模式实时预览样式刷新浏览器
    前端自动化神器LiveReload配合浏览器和less/sass使用方法
    关于opacity透明度子元素继承现象的若干研究以及hack方法
    使用background和background-image对CSS优先级造成影响
    HTML布局篇之双飞翼(圣杯)布局
    IE使用最高版本设置
    Add data when form is submitted
    fixed window.location.origin useless in IE
  • 原文地址:https://www.cnblogs.com/88999660/p/3710577.html
Copyright © 2011-2022 走看看