unity3d 动画帧数_unity3d 动画片段最小帧数 - CSDN
  • 比如说一个角色的攻击动画,可以通过播放动画到某一来执行某个方法 通过图添事件 点击人物,然后在window找到Animtaion,之后找到要执行事件的动画。 void Attack1(){ Debug.Log (&...

    前言

    当使用具体模型时,可以使模型动画来触发方法,即帧事件,(类似碰撞器,触发器的触发方法)。比如说一个角色的攻击动画,可以通过播放动画到某一帧来执行某个方法

    另外新动画也可以使用Animation做帧事件
    帧事件一般用射线或相交球配合使用,做动画检测

    通过Anmation图手动添帧事件

    • 点击人物,然后在window找到Animtaion,之后找到要执行帧事件的动画。
      1
        void Attack1(){
            Debug.Log ("Attack!!");
        }
        void Attack2(){
            Debug.Log ("Attack2!!");
        }
    • 然后移动帧动画,找到要播放的帧,在其银白色处、灰色处?右击添加事件
      2
    • 添加对应(公有)方法,一个动画可以同时触发多个方法,
      3

    • 注意,如果添加的动画是只读的不能添加事件,那么要把这个动画ctrl/commond +d 复制出来,给物体重新添加动画,就可以添加事件了

    注意帧事件不能添加而不设置方法,否则会报错
    AnimationEvent has no function name specified!

    虽然不影响游戏内容。不过也不要只添加事件而不设置不设置事件把-

    通过代码添加帧事件

        private Animation _ani;
    
        void Awake(){
            _ani = GetComponent<Animation> ();
            //获取动画片段
            AnimationClip attack = _ani.GetClip ("Attack");
            //创建事件
            AnimationEvent attackEvent = new AnimationEvent ();
            //给事件绑定方法
            attackEvent.functionName = "NewAttack";
            //在某时间触发事件
            attackEvent.time = 1.7f;
            //添加帧事件
            attack.AddEvent (attackEvent);
        }
    
    
    
    展开全文
  • 是没办法取到具体的帧数的 因为那个动画是连续的曲线动画。只能知道现在在第几帧和第几帧之间。 通过nbalexis的方法计算:AnimationState.normalizedTime 的值始终都是从0到1的,然后你用这个值乘以你动画的总...

    1.如何获得当前动画播放到了第几帧~~ 

    如果你指的是模型动画的话 是没办法取到具体的帧数的 因为那个动画是连续的曲线动画。只能知道现在在第几帧和第几帧之间。

    通过nbalexis的方法计算:AnimationState.normalizedTime 的值始终都是从0到1的,然后你用这个值乘以你动画的总帧数 然后取整就可以得出你当前在哪两个帧之间。(int)变量 进行取整。

    来自:http://www.ceeger.com/forum/read.php?tid=2051&fid=2&page=2


    2.  3D引擎不同于2D,它的帧只是一个概念,30帧/s只是说曲线的关键点最小间隔,在播放的时候引擎通过时间来取曲线上对应的插值,因为每个update对于每台性能不同的电脑来说是不稳定的,update更不会去适应动画帧频,可以说大多数画面帧都不会对应到每个关键帧上(比如就算是导入1秒10帧的动画,仍然能在引擎中以每秒120帧的速度播放并且每帧都有相对运动)。所以你只能换算帧所在的时间点,通过记录动画的播放时间来判断激活事件。另外动画面板时间线下方右击也有事件激发器,但是不常用。

    normalizedTime就是动画时间的百分比,你可以用这个来控制动画的播放。

    来自:http://tieba.baidu.com/p/2347740881

    3.Unity - Scripting API: AnimatorStateInfo.normalizedTime
    https://docs.unity3d.com/ScriptReference/AnimatorStateInfo-normalizedTime.html

    4.(转)Unity3D - 动作动画忽略timeScale - ☆A希亿 - 博客园
    http://www.cnblogs.com/wonderKK/p/4645575.html

    5.AnimationState.normalizedTime 规范化时间
    http://www.ceeger.com/Script/AnimationState/AnimationState.normalizedTime.html

    6.AnimationState.normalizedTime 归一化时间 [圣典百科]
    http://wiki.ceeger.com/script/unityengine/classes/animationstate/animationstate.normalizedtime

    AnimationState.normalizedTime 归一化时间

    JavaScript ⇒ public var normalizedTime: float; 
    C# ⇒ public float normalizedTime;

    Description 描述

    The normalized time of the animation.

    动画的归一化时间。

    A value of 1 is the end of the animation. A value of 0.5 is the middle of the animation.

    值为1是动画的结尾。值为0.5是动画的中间。

    JavaScript:

    no example for javascript;

    C#:

    using UnityEngine;
    using System.Collections;
     
    public class ExampleScript : MonoBehaviour
    {
        public Animation anim;
     
        void Start()
        {
            // Fast forward to the middle of the animation
            anim["Walk"].normalizedTime = 0.5f;
        }
    }


    展开全文
  • Unity3D 帧数修改

    2018-10-08 14:46:25
    Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数。 2.脚本中设置: Application.targetFrameRate = 60 (设置为 -1 表示不限定帧率) 3.界面中显示 using UnityEngine; using System....

    1、在edit->project setting->Quality(质量)设置里把帧数设定关闭image之后才能在代码中修改游戏运行的帧数。

    2.脚本中设置:

    Application.targetFrameRate = 60 (设置为 -1 表示不限定帧率)

    3.界面中显示

    using UnityEngine;
    using System.Collections;
    
    
    public class ShowFps : MonoBehaviour
    {
        private float m_FPS = 0;
        public float updateInterval = 0.5F;
        private float accum = 0; // FPS accumulated over the interval
        private int frames = 0; // Frames drawn over the interval
        private float timeleft; // Left time for current interval
        private GUIStyle titleStyle2 = new GUIStyle();
        void Awake()
        {
            Application.targetFrameRate = -1;
            titleStyle2.fontSize = 20;
            titleStyle2.normal.textColor = Color.green;
        }
    
        // Use this for initialization
        void Start()
        {
            timeleft = updateInterval;
        }
    
        // Update is called once per frame
        void Update()
        {
    
            timeleft -= Time.deltaTime;
            accum += Time.timeScale / Time.deltaTime;
            ++frames;
    
            // Interval ended - update GUI text and start new interval
            if (timeleft <= 0.0)
            {
                // display two fractional digits (f2 format)
                float fps = accum / frames;            
                if (fps < 30)
                    titleStyle2.normal.textColor = Color.yellow;
                else
                    if (fps < 10)
                    titleStyle2.normal.textColor = Color.red;
                else
                    titleStyle2.normal.textColor = Color.green;
    
                m_FPS = fps;
                //  DebugConsole.Log(format,level);
                timeleft = updateInterval;
                accum = 0.0F;
                frames = 0;
            }
        }
    
        void OnGUI()
        {
            string format = System.String.Format("{0:F2} FPS", m_FPS);
            GUI.Label(new Rect(Screen.width / 2, 0, 100, 100), format, titleStyle2);
        }
    }
    

     

    展开全文
  • Unity3D动画帧事件

    2018-05-15 14:06:41
    前几天在项目开发中碰到一个...于是就想着在动画播放到某一的时刻才实例化特效,这样就解决了动画与特效不同步的问题。首先我们要做的是如何给动画添加事件? 1,建立一个空白的Unity工程,导入一个带有动画的模型。

    前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的。假如主角在攻击NPC时,先实例化特效,后播放动画。动画毕竟是有一个时间长度的。等到动画播放攻击挥刀的那一瞬间时,特效可能早就播放完了。于是就想着在动画播放到某一帧的时刻才实例化特效,这样就解决了动画与特效不同步的问题。首先我们要做的是如何给动画添加事件?

    1,建立一个空白的Unity工程,导入一个带有动画的模型。

    前期准备基本上就这么多了,接下来就可以添加动画事件了。添加动画事件有两种:

    方法一:直接在模型中添加事件

    到此处设置已完成了。运行下看会发生怎样的结果。

    报错了,回掉函数找不到接收者,说白了就是我们没有给人家回掉函数的定义,那么在脚本中定义该回掉函数吧!

    OK,在场景中挂载该脚本,再次运行。

    动画播放了,回掉函数也生效了!此时再实例特效就OK了。

    那么开始第二种方法,我们可以对任意动画任意帧添加任意事件,貌似说的有点任性了。说的好像和真的一样,那就看看到底是不是真的。

    在码代码之前,我们先去学习一个叫做AnimationEvent的东东。

    了解这几个参数,我们就可以写代码了。

    复制代码
    using UnityEngine;
    using System.Collections;
    
    public class TestAnimationEvent : MonoBehaviour
    {
        /// <summary>
        /// 我们要添加事件的动画
        /// </summary>
        public AnimationClip clip;
        public GameObject target;
        // Use this for initialization
        void Start()
        {
            AddAnimationEvent();
        }
        /// <summary>
        /// 代码中自定义事件
        /// </summary>
        public void AddAnimationEvent()
        {
            //创建动画事件
            AnimationEvent animationEvent = new AnimationEvent();
            //设置事件回掉函数名字
            animationEvent.functionName = "GoToTarget";
            //传入参数
            animationEvent.objectReferenceParameter = target;
            //设置触发帧
            animationEvent.time = 1.0f;
            //注册事件
            clip.AddEvent(animationEvent);
        }
    
        /// <summary>
        /// 可视化添加动画帧事件 
        /// </summary>
        public void CallFuncation()
        {
            Debug.Log("Animation Event Triggered !");
        }
        
        /// <summary>
        /// 代码添加回掉函数
        /// </summary>
        /// <param name="go"></param>
        public void GoToTarget(GameObject go)
        {
            this.transform.LookAt(go.transform);
            Debug.Log("目标物体:" + go.name + " " + go.transform.position);
            if (Vector3.Distance(this.transform.position, go.transform.position) < 0.2f)
            {
                return;
            }
            else
            {
                 transform.position= Vector3.MoveTowards(this.transform.position, go.transform.position, 2f);
            }
        }
    }
    复制代码

    好了,我们来运行一下,测试结果就是人物移动到目标点。

    运行后

    好了,到此基本上完成了,如果有什么疑问,联系我哦!

    工程代码: http://pan.baidu.com/s/1fZ9pW

    展开全文
  • 动画机 unity自带的帧动画机很方便,我们首先选择所要播放序列帧动画的Image,然后在Window下选择Animation,会弹出一个动画制动的界面,我们选择Create,然后进入如下界面:我们按照如下添加动画控制的属性,然后...
  • 在Cocos2dx中,对大图的处理已经封装好了一套自己的API,但是在Unity3D中貌似没有类似的API,或者说我没找到。不过这也在情理之中,毕竟Unity3D是做3D的,要切割图片的地方还是很少的。 因为我用Unity3D主要是用于...
  • Unity3D之简单的帧动画

    2012-11-11 10:54:50
    算是第一篇非转载的文章了~ 在这里推荐个Unity3d很多功能效果的脚本集合的网站,也是部门老大发现给我的~ ... 本人也是个初级的开发者,这里只是...帧动画的实现可以用第三方的插件,类似2DToolkit,可以很容易的实
  • 1、在Quality(质量)设置里把帧数设定关闭之后才能在代码中修改游戏运行的帧数   2、在Unity中新建脚本UpdateFrame.cs ,编写如下代码 using UnityEngine; using System.Collections; /// /// 功能:修改游戏...
  • using UnityEngine; using System.Collections;   public class animationCtrl : MonoBehaviour {  private float hSliderValue;  private AnimationState currentAni;    void Start () { ... gameObj
  • Unity3D之简单的帧动画 代码 博文地址:http://blog.csdn.net/midashao/article/details/8139109
  • 当使用具体模型时,可以使模型动画来触发方法,即事件,(类似碰撞器,触发器的触发方法)。比如说一个角色的攻击动画,可以通过播放动画到某一来执行某个方法。 另外新动画也可以使用Animation做事件 ...
  • unity3d动画帧事件回调脚本必须直接挂在模型上,即与Animator同级,不能挂接在模型的父节点或者子节点,否则无法找到回调函数以上在idle动作中新增帧事件skill,回调模型脚本中的skill()函数 转载于:...
  • 代码事件监听 using UnityEngine; using System.Collections; public class BoxEventScript : MonoBehaviour {  void Start () {  ... AnimationClip gunMove = animation.GetClip("left");//动画名  
  • Unity3d UGUI序列帧动画

    2017-01-09 14:54:51
    这里主要针对Unity3D中2D图片动画进行帧动画播放。
  • unity3d动画的添加 http://unity3d.com/support/documentation/Manual/Character-Animation.html#AnimLayers 在unity3d中,我们能很方便的使用4个动画,默认的是走,跑,跳,待机动作,可当...
  • 如果拿Unity3D制作2D游戏,由于Unity3D不接受GIF动画,所以动画要按照最原始的游戏制作方式,利用序列大图完成。在《【Photoshop】合并一系列序列图片成序列大图》(点击打开链接)中,我曾经提到如何用常用的...
  • 把序列切割成一张张小的sprite,然后在代码中定时修改sprite Renderer,或者创建一个动画,插入关键来替换image 这种方法适合用着序列不多的情况,因为如果太大会导致资源包里出现好多的下图资源(当然不是真...
  • Unity3D~帧动画的制作

    2016-04-03 16:16:27
    unity3D 帧动画制作
  • using UnityEngine; public class SpriteAnimator : ... /// Sprite动画帧 public Sprite[] m_clips; /// 动画计时器(默认每隔0.1秒更新一帧) protected float timer = 0.1f; /// 当前的帧数 prote.
  • 前些日子公司让笔者写了一个帧动画控制工具,主要是用来控制聊天表情这些2D动画的,原本想偷懒在网上直接考了一份代码,没想到运行之后发现当帧率为负的时候还有bug,最后在他基础上做了改动,优化了一下并把bug修复...
1 2 3 4 5 ... 20
收藏数 5,860
精华内容 2,344
关键字:

unity3d 动画帧数