2016-04-03 15:52:33 zzlyym 阅读数 1070

        帧动画制作过程。

1:把几张图片拖到项目中,全选,改变它们的属性类型为精灵图,如图所示,之后apple应用一下。

2::精灵图全选,拖到Hierarchy中,这时会自动创建一个Animation的文件,我在场景中改名为Animation,这时你会发现精灵图的旁边出现了两个东西,如下图,第一个是控制动画的,第二个是动画。


3:可能初始图片不是我们想要的,这时选中Animation,如图属性中更改第一张显示的图片。

4:如果只让他播放一次,选中,looptime勾点掉,如果想改变他的播放速度,选中动画控制,属性点击open,出现下图的东西,选中,右边属性有个speed,数值越小,播放速度越慢。有错或者需要注意的地方请指出,谢谢了。


2016-09-12 11:44:09 qq_26270779 阅读数 622

unity3d如何播放帧动画,我写的这种方法比较麻烦。得一张一张图片的往数组里拖,适合图片较少的帧动画。

效果如下:



上代码吧:

using UnityEngine;
using System.Collections;


public class play : MonoBehaviour {
    public GameObject startscene;//页面
    public GameObject selectscene;

    public float animSpeed = 10;//1秒播放10帧图片
    private float animTimeInterval = 0;//每一帧的时间间隔

    public SpriteRenderer lantiao;//渲染器
    public Sprite[] lantiaoSpriteArray;//创建精灵数组
    private int lantiaoIndex = 0;//当前播放的帧的索引
    private int lantiaoLength = 0;//数组长度
    private float lantiaoTimer = 0;//计时器

    public bool m_bpress; //是否按下


	// Use this for initialization
	void Start () {
        animTimeInterval = 1 / animSpeed;//每一帧的时间间隔
        lantiaoLength = lantiaoSpriteArray.Length;
	}
    void OnPress(bool isPressed) 
    {
        print("press");
         if (isPressed) 
         {
             m_bpress = isPressed;
         } 
         else 
         {
             m_bpress = isPressed; 
         } 
    }
	
	// Update is called once per frame
	void Update () {
        if (m_bpress)
        {
            print("m_bpress:" + m_bpress);
            
            lantiaoTimer += Time.deltaTime;
            if (lantiaoTimer > animTimeInterval)
            {
                print("in if"); 
                lantiaoTimer -= animTimeInterval;//计时器减去一个周期的时间
                lantiaoIndex++;//自动播放下一帧
                if (lantiaoIndex >= lantiaoLength)
                {
                    startscene.SetActive(false);
                    selectscene.SetActive(true);
                }
                lantiaoIndex %= lantiaoLength;//判断索引是否超过长度
                lantiao.sprite = lantiaoSpriteArray[lantiaoIndex];
            }
        }
        else
        {
            lantiao.sprite = lantiaoSpriteArray[0];
            lantiaoIndex = 0;
        }
	}
}


2012-12-09 18:09:25 mashuailove 阅读数 870

using UnityEngine;

using System.Collections;

 

public class animationCtrl : MonoBehaviour {

  private float hSliderValue;

  private AnimationState currentAni;

 

  void Start () {

      gameObject.animation.Play("shot");

      gameObject.animation.Stop();

      currentAni = animation["shot"];

  }

 

  void LateUpdate () {

      currentAni.time = hSliderValue;

      currentAni.enabled = true;

 

      animation.Sample();

      currentAni.enabled = false;

  }

 

  void OnGUI() {

      hSliderValue = GUILayout.HorizontalSlider(hSliderValue, 0.0f, currentAni.length, GUILayout.Width(100));

  }

}

2014-03-22 20:49:56 AWNUXCVBN 阅读数 6829


using UnityEngine;
using System.Collections;
using System.IO;

public class FrameAnimation : MonoBehaviour
{
    public Texture2D image;
    public int w;
    public int h;
    public float nextTime = 0.0f;
    public float rate = 0.3f;
    int i = 0;
    // Use this for initialization
    void Start()
    {
        w = Screen.width;
        h = Screen.height;
        image = new Texture2D(w,h);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0)&& Time.time > nextTime)
        {
            nextTime = Time.time + rate;
            i++;
            StartCoroutine(SaveImage(i));
        }
    }

    IEnumerator SaveImage(int i)
    {
        yield return new WaitForEndOfFrame();  
        image.ReadPixels(new Rect(0, 0, w, h), 0, 0, true);
        image.Apply();
        byte[] bytes = image.EncodeToPNG();
        File.WriteAllBytes(Application.streamingAssetsPath + "/"+i + ".png", bytes);
        yield return null;
    }
}


2015-02-22 15:13:04 book_longssl 阅读数 10803




今天主要总结的是 unity3d 中内置动画操作,以及代码事件编写动画实现

1.如何导入、执行外部动画 

在项目窗口中,首先,单击选择我们所准备的动画模型,在属性面板中选择Animations栏,
在属性中点击“+","-"可以增加和删除动画片段,
而在Start以及End中,可以分别设置每一个动画片段的开始帧数及结束帧数。
下面是我自己动画做的一个分解:
Idle:表示我动画中的准备动作。
Aim:表示我动画中的瞄准动作。
Fire:表示我动作中的投篮动作。



当上面动画片段设置好以后,我们用代码来实现,如何通过键盘上的数字按键”1“来控制这些片段完成一个动画流程

首先,如何设置一个按键:
在菜单栏中选择 Edit->roject Setting->Input
在Input属性面板中选择一项
Name设置成Play
Negative Button(按下键)设置成数字键”1“ ; 
Positive Button (松开键)设置成数字键”1“ ; 
如下图所示:

 

好了,按键我们在上面已经设置好了。
接下来到底如何用代码来实现通过键盘上的数字按键”1“来控制这些片段完成一个动画流程呢?
下面请看详细代码 :
  1. //是否可控
  2. bool CanControl=true;
  3. // Update is called once per frame
  4. void Update ()
  5. {
  6.    //当按下play  也就是我们上面设置的数字键”1“。
  7.   if (Input.GetButtonDown ("Play"))
  8.   {
  9.         //执行动画 叫"Aim"的动画片段 也就是我们上面设置的瞄准动画片段
  10. gameObject.animation.PlayQueued ("Aim");
  11.   }
  12.    //当按下1键 且可控
  13.    else if (Input.GetButtonUp ("Play")&&CanControl  )
  14.    {
  15.     //执行动画 fire 也就是我们上面设置的投篮动画片段
  16.     gameObject.animation.PlayQueued ("Fire");
  17.     //接着继续执行 Idle  也就是我们上面设置的准备动画片段
  18.     gameObject.animation.PlayQueued ("Idle");
  19.      CanControl =false ;
  20.    }
  21.   CanControl =true;
  22. }
复制代码

 
复制代码
通过上述简单的代码我们即可实现动画分解片段的串联
下面请看效果图:

1.按下键盘数字键"1"所执行瞄准的动作,"Aim"的动画片段



2.松开数字键”1“所执行的投篮动作,动画 fire



3. .松开数字键”1“所执行的准备动作,接着继续执行 Idle



2.使用unity3d内置的动画系统

首先,拖放素材到场景窗口中,设置好摄像机坐标,加入平行光



在游戏窗口右上角,单击  ,在弹出的菜单中依次选择 Add Tab->Animation



那么我们将发现游戏窗口上多了一个叫Animation(动画)的选项卡


接下来创建一个动画,在Animation(动画)选项卡中点击  后,在
弹出的窗体中保存我们的动画。



在Animation(动画)选项卡中,我们发现会有一小段菜单栏,我们从左到右先一一解释下
1:表示调到动画上一帧;
2:表示跳刀动画下一帧;
3:文本框输入 表示任意时间点
4:添加一个key
5:表示添加一个事件(需要代码编写)动作
 

可在对应选择项后面单击”-“号,则在弹出的菜单中 选择添加一条对应曲线或 key 



下面我们添加 Rotation.y (以Y轴旋转),值为360度。
表示我们的对象将以360度的旋转物体。



在曲线区域 左键按住不放 拖拽选择一块区域



按”F“键后,就会发现 此区域会局部放大,这样很方便我在曲线节点较多的情况下查看




上面简单介绍了下Unity3d的内置动画,下面 我们将介绍代码事件动画



如上图 我们首先定义了一个 摄像机的对象
然后 写了2个公共事件方法
CameraFarAway():这个方法我们实现了 摄像机视角拉远
CameraClose():这个方法我们实现了 摄像机视角拉近

然后通过上面的方法,在对应事件节点添加一个事件动画 即可实现 拉远拉近的动画
如下图:

视角拉近 叉车旋转,叉车前面的夹子下降的动画
 

视角拉远 叉车旋转,叉车前面的夹子上升的动画

 



unity3d代码实现动画功能

  1. //定义一个时间变量
  2. public float time=5.0f;
  3. // Use this for initialization
  4. void Start () {
  5.                 //定义一个动画曲线 起始位置 坐标为-3.023f,经过5.0秒后 坐标移动到2.96f
  6. AnimationCurve curve=AnimationCurve.Linear (0.0f,-3.023f,time,2.96f);
  7. //添加
  8. curve.AddKey (2*time,-3.023f );
  9. //创建一个动画片段
  10. AnimationClip clip=new AnimationClip ();
  11. //设置该片段中的曲线对象 以X轴移动
  12. clip.SetCurve ("",typeof (Transform ),"localPosition.x",curve );
  13. //添加该片段到动画
  14. animation.AddClip (clip,"Test" );
  15. //播放名叫“Test”的动画片段
  16. animation.Play ("Test");
  17. //循环播放该动画
  18. animation.wrapMode =WrapMode.Loop ;
  19. }
  20. // Update is called once per frame
  21. void Update () {
  22. }
复制代码


复制代码
由上可以看出 代码创建 跟昨天所总结内部设置动画差不多【狗刨学习网
首先 创建一个曲线 然后由曲线生成片段 最后由片段生成动画。

Unity3D动画

阅读数 9628

没有更多推荐了,返回首页