Unity3D 学习笔记9 —— 3D模型动画控制

        在Unity中,我们可以使用2D的Spine动画来制作核心战斗模块,当然也能用3D模型来制作,这时候我们需要学会使用的工具类就是Unity为我们提供的Animation动画控制类。

        当我们将一个模型导入Unity中时,我们可以看到资源文件下有Animations和Materials两个目录,它们分别用于存放此3D模型的动画和材质。


一、动画设置:

        在Animations目录下随便选中一个动画文件(以.anim为后缀),在属性(Inspector)面板中查看它的相关属性:

        

        我们可以看到这里设置的主要就是此动画的播放方式有五种:Default、Once、Loop、Ping Pong、Clamp Forever,但在实际使用中:

        Default和Once以及Clamp Forever并无明显区别,都是播放一次停止在最后一帧

        Loop:无限地循环播放动画

        Ping Pong:顾名思义就是反弹的意思,它的执行方式就是执行完一次动作之后反过来倒序执行一次回到初始状态。


二、模型的动作选择:

        选中我们当前操作的模型,在Inspector中可以看到模型下面绑定了一个动画控制器,其中第一个属性Animation就是此模型的默认动作,切换动作其实就是通过改变这个属性的值来实现的:

        

        在模型的控制脚本中,我们可以声明一个公有的Animation对象,然后通过拖拽的方式在属性面板中为这个对象进行赋值:

        

三、关键方法:

        Animation类在控制动作的方法中,比较常用的有:Play、Stop、PlayQueued、IsPlaying和AddClip

1.Play:播放一个动作的接口,但必须是在之前的动作播放完的前提下再调用才有效,假如正在执行其他动作,则调用此方法无效

2.Stop:无论当前是否正在执行动作,都立即停止在当前帧

3.PlayQueued添加多个动作队列的时候调用,此时模型会依次执行队列中的动作,可用于动作拼接

4.IsPlaying:判断当前是否正在执行动作

5.AddClip:添加一个动画裁剪,即可只播放指定起点帧到终点帧部分的动作内容

四:实践展示:

        在场景中放置一个模型,并用UGUI放置三个按钮,用于切换动作,预览图如下:

   

        在Canvas下我们绑定了模型的控制脚本ModelController:

<span style="font-size:18px;">using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class ModelController : MonoBehaviour {
	public Animation mAnimation;
	
	Button button_run,button_walk, button_attack;
	// Use this for initialization
	void Start () {
        /*Transform model_obj = GameObject.Find("qiya").transform;
        Animation animation = model_obj.GetComponent<Animation>();
        Debug.Log("length");
        animation.Stop();*/
        button_run = transform.FindChild("Button_run").GetComponent<Button>();
		button_walk = transform.FindChild("Button_walk").GetComponent<Button>();
        button_attack = transform.FindChild("Button_jump").GetComponent<Button>();
		
		EventTriggerListener.Get(button_run.gameObject).onClick = OnButtonClick;
		EventTriggerListener.Get(button_walk.gameObject).onClick = OnButtonClick;
		EventTriggerListener.Get(button_attack.gameObject).onClick = OnButtonClick;
	}

    /// <summary>
    /// 在这里监听按钮的点击事件
    /// </summary>
    /// <param name="go"></param>
    private void OnButtonClick(GameObject go) {
        if (go == button_run.gameObject){
            //确保可以立即切换动作
            mAnimation.Stop();
			mAnimation.Play("move");
        }else if (go == button_walk.gameObject){
            mAnimation.Stop();
            AnimationClip clip = mAnimation.clip;
            //添加一个剪辑,设置起始帧与结束帧
            mAnimation.AddClip(clip, "walk",0,10,false);
            mAnimation.Play("walk");
        }
        else if (go == button_attack.gameObject){
            mAnimation.Stop();
            //保证第一个动画播放完毕在播放第二个动画
            mAnimation.PlayQueued("attack0",QueueMode.PlayNow);
            mAnimation.PlayQueued("idle0", QueueMode.CompleteOthers);
        }
    }
	
	// Update is called once per frame
	void Update () {
	
	}
}
</span>
        如此,我们就实现了模型动作切换的处理。


四、控制模型移动:

    移动包括两种形式:水平移动和旋转

    首先,我们需要设定两个常数:水平移动速度(TranslateSpeed)和中心旋转速度(RotateSpeed),然后通过获取模型的transform组件,然后调用相应的方法来实现模型的移动,例如:

//向前移动
model_obj.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed);
//向后移动
model_obj.Translate(Vector3.forward * Time.deltaTime * (-TranslateSpeed));
//向右旋转
model_obj.Rotate(Vector3.up * Time.deltaTime * RotateSpeed);
//向左旋转
model_obj.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed));

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
学习Unity3D时,以下是一些重要的笔记: 1. Unity3D基础知识: - 游戏对象(Game Objects)和组件(Components):了解游戏对象的层次结构和组件的作用。 - 场景(Scenes)和摄像机(Cameras):学会如何创建场景并设置摄像机视角。 - 材质(Materials)和纹理(Textures):掌握如何创建和应用材质和纹理。 - 动画Animations):学习如何创建和控制游戏对象的动画。 2. 脚本编程: - C#语言基础:了解C#语言的基本语法和面向对象编程概念。 - Unity脚本编写:学习如何编写脚本来控制游戏对象的行为和交互。 - 常见组件和功能:掌握常见的Unity组件和功能,如碰撞器(Colliders)、刚体(Rigidbodies)、触发器(Triggers)等。 3. 游戏开发流程: - 设计游戏关卡:了解如何设计游戏场景和关卡,包括布局、道具、敌人等。 - 游戏逻辑实现:将游戏规则和玩家交互转化为代码实现。 - UI界面设计:学习如何设计游戏中的用户界面,包括菜单、计分板等。 - 游戏优化和调试:优化游戏性能,解决常见的错误和问题。 4. 学习资源: - Unity官方文档和教程:官方提供了大量的文档和教程,逐步引导你学习Unity3D。 - 在线教程和视频教程:网上有很多免费和付费的Unity教程和视频教程,可根据自己的需求选择学习。 - 社区论坛和博客:加入Unity开发者社区,与其他开发者交流并获取帮助。 通过系统地学习这些内容,你将能够掌握Unity3D的基础知识并开始开发自己的游戏项目。记得不断实践和尝试,不断提升自己的技能!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值