首页 > 其他分享 >Unity (动画效果 和操控人物移动)

Unity (动画效果 和操控人物移动)

时间:2024-05-25 14:33:22浏览次数:16  
标签:动画 操控 private Unity bool 0f 移动 Movement

前沿

可以在store上选中自己的模型喜欢然后倒入到你的库中

 

然后场景中需要设置路线什么的 要用到导航

 因为天花板是头顶,不是静态的,所以把statc 给取消勾选

然后windows->>>Ai ------> Navigation  点击 level 模型

 

然后

 点击Bake 然后就是烘培了导航

 

人物移动跟随摄像机

新建PlayerContronller 控制器脚本

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 玩家控制的脚本
/// </summary>
public class PlayMovement : MonoBehaviour
{
    //世界坐标下的目标方向向量
    private Vector3 m_Movement;
    
    //旋转的四元数
    private Quaternion m_Rotation=Quaternion.identity;

    //游戏的对象的动画组件、刚体组件
    private Animator anim;
    private Rigidbody rd;

    //游戏对象的每一秒的旋转速度
    private float m_Speed = 20f;

    //音频组件--控制脚步声的音频
    AudioSource audioSource;
    // Start is called before the first frame update
    void Start()
    {
        rd=GetComponent<Rigidbody>();   
        anim=GetComponent<Animator>();
        audioSource=rd.GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        //辅助记录目标坐标的水平分量与垂直分量。
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        //根据键盘的键值输入决定是否进行行走动画的播放
        bool IsHori = !Mathf.Approximately(horizontal, 0f);
        bool IsVori = !Mathf.Approximately(vertical, 0f);
        bool iswalking = IsHori || IsVori;
        anim.SetBool("IsWalking", iswalking);

        //控制脚步声声音的变化
        if (iswalking)
        {
            //人物正在移动,播放脚步声音
            if (!audioSource.isPlaying)
            {
                audioSource.Play();
            }
        }
        else 
        {
            //没有移动,关闭脚步声的播放
            audioSource.Stop();
        }

        //将键盘获取到的键值输入赋值给目标坐标
        m_Movement.Set(horizontal,0f,vertical);
        //归一(单位)化,得到世界坐标下的目标方向向量
        m_Movement.Normalize();

        //获取每帧应到达的世界坐标下的前向方向向量
        //用于计算旋转后角度的四元数
        Vector3 desiredForward = Vector3.RotateTowards(transform.forward,m_Movement,m_Speed*Time.deltaTime,0f);
        
        //每帧旋转后的四元数(Transform组件视角下的角度)
        m_Rotation=Quaternion.LookRotation(desiredForward);

        
    }

    //该方法在计算机、动画计算求值后,每一帧都会调用。  
    //解决根动画移动的问题,进行物理适时调用。
    private void OnAnimatorMove()
    {
        //运用刚体组件控制物体的移动与旋转,下列两个方法传入的参数均为目标值
        rd.MovePosition(transform.position + m_Movement * anim.deltaPosition.magnitude);
        rd.MoveRotation(m_Rotation);
    }

}

 

这段代码就是控制人物移动的数据,然后控制人物移动的动画

  //辅助记录目标坐标的水平分量与垂直分量。
  float horizontal = Input.GetAxis("Horizontal");
  float vertical = Input.GetAxis("Vertical");

  //根据键盘的键值输入决定是否进行行走动画的播放
  bool IsHori = !Mathf.Approximately(horizontal, 0f);
  bool IsVori = !Mathf.Approximately(vertical, 0f);
  bool iswalking = IsHori || IsVori;
  play_animator.SetBool("IsWalking", iswalking);

介绍在密室里面

   // Y轴失踪是不会动的 所以 为0F
   //将键盘获取到的键值输入赋值给目标坐标
   m_Movement.Set(horizontal, 0f, vertical);

//归一(单位)化,得到世界坐标下的目标方向向量
m_Movement.Normalize();

 

        //获取每帧应到达的世界坐标下的前向方向向量
        //用于计算旋转后角度的四元数
        Vector3 desiredForward = Vector3.RotateTowards(transform.forward, m_Movement, m_Speed * Time.deltaTime, 0f);

        //每帧旋转后的四元数(Transform组件视角下的角度)
        m_Rotation = Quaternion.LookRotation(desiredForward);

上面的代码就是世界坐标轴的方向

 

    /// <summary>
    ///该方法在计算机、动画计算求值后,每一帧都会调用。  
    ///解决根动画移动的问题,进行物理适时调用。
    /// </summary>
    private void OnAnimatorMove()
    {
        //运用刚体组件控制物体的移动与旋转,下列两个方法传入的参数均为目标值
        play_rigidbody.MovePosition(transform.position + m_Movement * anim.deltaPosition.magnitude);
        play_rigidbody.MoveRotation(m_Rotation);
    }

 

设置动画

 

操作步骤

 

动画化人物角色:

1.Models->Characters->JohnLemon拖入

2.GameObject->Align with view(调整视角)

3.创建预制体->open预制体->auto save取消勾选

4.给JohnLemon添加动画,创建文件夹MyAnimators->Animator Controller->双击进入

5.拖动John_Idle和John_Walk进入,左侧加入bool值isWalking,设置idle和walk的双向箭头

6.选中从idle到walk的箭头(双向都要操作),Has Exit Time取消勾选,然后设置Conditions,walk->idle选false,反向选true

7.动画状态给到游戏角色,John_Anim直接拖到人物的Controller上

 

新建Animaltor 如图

设置新的bool

 

 设置 他的走和战力的情况

 

 

然后在再运行游戏就可以看到了

 ok  完美

 

标签:动画,操控,private,Unity,bool,0f,移动,Movement
From: https://www.cnblogs.com/yf-html/p/18212281

相关文章

  • 【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植
    最终效果系列导航文章目录最终效果系列导航前言素材简单搭建环境豌豆射手向日葵源码结束前言在游戏界,有些作品以其独特的创意和精彩的游戏体验,成为了经典中的经典。而《植物大战僵尸》就是其中的佼佼者,它以其独特的塔防玩法和富有趣味性的设计,吸引了全球无数玩家......
  • Unity (保姆入门)
    前沿周末啦开始新的一轮征途,我的目标就是星辰大海嘎嘎孟还好之前学过COCOS,这个编辑器差不多, 还是不学无术啊。哈哈哈开始新的项目吧, 骚年!!!创建项目 然后倒入你的文件资源:材质,预制体之类的我网上找的材料然后在你的场景里面右键鼠标创建一个3D的胶囊体 ......
  • SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)
    了解了常见的几种手势后,接下来我们了解一下组合手势的操作,当一个视图存在多个手势的时候,为了避免手势冲突,SwiftUI提供了自定义手势的方法,比如同时进行,顺序进行等等。以下是一些常见的多种手势组合使用方式:simultaneously(with:):同时使用多个手势,使它们可以同时响应用户的......
  • Unity基础——Input
    Unity基础——Input1.鼠标输入//我们在这段代码最后实现一个基本用鼠标控制视角的功能usingUnityEngine;classScript1:MonoBehaviour{[SerializeField]privatefloatmouseSensitivity=30f;privatefloatxRotation=0f;//当前的旋转角度......
  • Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生
    IC-Light代表ImposeConstantLight,是一个控制图像照明的项目。可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体ID需求的最大的问题解决了。目前,已经发布了两种类型的模型:文本条件重新光照模型。......
  • Unity Shader介绍
    1.Shader的基本概念什么是Shader?Shader是小型程序,用于在GPU上运行,处理顶点、像素或其他图形处理单元。Unity主要使用以下两种Shader:顶点Shader(VertexShader):处理每个顶点的数据,如位置、颜色和纹理坐标。片段Shader(FragmentShader):决定每个像素的颜色。Unity中的Shader类型......
  • 【Unity资源】Unity学习资源汇总
    【中文网站】1.Unity官方中文网站(https://learn.u3d.cn)-[推荐]特点:提供官方的Unity资源、教程和支持。内容权威且更新及时。适合人群:所有层次的学员和开发者。2.Unity3D中国(https://unity.cn)-[推荐]特点:Unity的中文官方网站,提供全面的资源和支持,包括下载、......
  • SwiftUI中的手势(DragGesture拖拽手势及Drag动画组件)
    上一篇文章我们了解了如何使用.gesture修饰符和@GestureState属性包装器,让我们看看另一种常见的手势:DragGesture拖拽手势。下面先看个效果图:这个效果中,我们实现了一个Text文本,并添加了拖拽手势,可以拖动到屏幕的任意位置,松手后停留在目标位置,而非回到原来的起点位置。UI......
  • C#基础:委托与事件(在Unity中举例)
    委托(Delegate):委托是C#中的一种类型,表示对具有特定参数列表和返回类型的方法的引用。委托类似于C++中的函数指针,但它是类型安全的,并且是面向对象的。它们通常用于将方法作为参数传递给其他方法,实现回调功能。委托的关键特性:类型安全:委托是类型安全的,这意味着方法的签名必须与......
  • three.js之动画
    动画<canvasid="mainCanvas"></canvas><scripttype="importmap">{"imports":{"three":"./js/build/three.module.js","three/addons/":"./js/jsm/"......