Unity中W、A、S、D运动,不知道新功能怎么用

Posted

技术标签:

【中文标题】Unity中W、A、S、D运动,不知道新功能怎么用【英文标题】:W, A,S, D movement in Unity, don't know how to use new funtions 【发布时间】:2021-05-14 23:46:12 【问题描述】:

您好,我对用于播放动画的动画控制器脚本有疑问,具体取决于按下的键

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimationController : MonoBehaviour

        function UpdateAnimations()
        
            if (Input.GetKeyDown(KeyCode.W))
            
                animation.CrossFade("goup");
            
            else if (Input.GetKeyDown(KeyCode.A))
            
                animation.CrossFade("goleft");
            
            else if (Input.GetKeyDown(KeyCode.D))
            
                animation.CrossFade("goright");
            
            else if (Input.GetKeyDown(KeyCode.S))
            
                animation.CrossFade("godown");
            

        

    void Start()
    
        
    

    // Update is called once per frame
    void Update()
    
        UpdateAnimations();
    

它说“Component.animation”太旧了,我应该使用 GetComponent 但我不知道如何

【问题讨论】:

【参考方案1】:

首先,您很可能是指void 而不是function,因为您的代码在c# 而不是unityscript(现在也早已弃用)


然后是的,你得到的那个代码有多少年了?对Component.animationComponent.rendererComponent.camera 等内容的直接访问在几年前已被弃用^^

正如错误已经告诉你宁愿使用例如Component.GetComponent 喜欢例如

public class AnimationController : MonoBehaviour

    // Reference this via the Inspector in Unity
    // via drag and drop. Then you don't need GetComponent at all
    [SerializeField] private Animation _animation;

    private void Awake()
    
        // or as fallback get it on runtime
        if(!_animation) _animation = GetCompoenent<Animation>();
    

    // Update is called once per frame
    private void Update()
    
        UpdateAnimations();
    

    private void UpdateAnimations()
    
        if (Input.GetKeyDown(KeyCode.W))
        
            _animation.CrossFade("goup");
        
        else if (Input.GetKeyDown(KeyCode.A))
        
            _animation.CrossFade("goleft");
        
        else if (Input.GetKeyDown(KeyCode.D))
        
            _animation.CrossFade("goright");
        
        else if (Input.GetKeyDown(KeyCode.S))
        
            _animation.CrossFade("godown");
        
    

【讨论】:

非常感谢老兄【参考方案2】:

您是如何在代码中定义“动画”的?

您可以尝试在代码顶部添加动画引用:

private Animation animation;

在您的 Start() 或 Awake() 方法中,添加:

// will add reference to the animation to be the Animation component
// in this GameObject
animation = GetComponent<Animation>();

【讨论】:

以上是关于Unity中W、A、S、D运动,不知道新功能怎么用的主要内容,如果未能解决你的问题,请参考以下文章

unity平台下怎么做动画

Unity3D UGUI组件跟随鼠标运动

Unity3d怎么控制第三人称的朝向

unity3d 中如何让一个物体一端固定,另一端随另一物体运动,就像弹簧一样

unity3d 虚拟手柄

Unity3D的unity playmaker怎么实现骨骼动画自由过度