淘先锋技术网

首页 1 2 3 4 5 6 7

今天学习了unity—动画,掌握了基本要领,每天早上要拿出三十分钟时间看笔记呦!!!

每日一句:接受普通的自己,然后拼尽全力去与众不同,

                  生活给你压力就还它奇迹,追逐光、成为光、散发光!

目录

查找最近的敌人(习题:续)

动画animation

Animation View

创建动画片段

录制动画片段

常用API函数


查找最近的敌人(习题:续)

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

public class FindEnemyByMinDistance : MonoBehaviour
{
     void OnGUI()
    {
        if (GUILayout.Button("查找距离最近的敌人"))
        {
            //查找场景中所有Enemy类型的引用
            EnemyDemo[] allEnemy = Object.FindObjectsOfType<EnemyDemo>();
            EnemyDemo min=FindEnemyMinDistance(allEnemy);
            min.GetComponent<MeshRenderer>().material.color = Color.red;
        }
    }
    public EnemyDemo FindEnemyMinDistance(EnemyDemo[] allEnemy)
    {
        EnemyDemo min = allEnemy[0];
        float minDistance = Vector3.Distance(this.transform.position, min.transform.position);
        for (int i = 1; i < allEnemy.Length; i++)
        {
            float newDistance = Vector3.Distance(this.transform.position, allEnemy[i].transform.position);
            if (minDistance > newDistance)
            {
                min = allEnemy[i];
                minDistance = newDistance;
            }
        }
        return min;
    }
}

动画animation

Animation View

通过动画视图可以直接创建和修改动画片段(Animation Clips)

显示动画视图:Window—>Animation

创建动画片段

为物体添加Animation组件

在动画视图中创建片段(点击Creat)

录制动画片段

点击录制按钮

点击Add Property,选择组件类型

调整时间点

在关键帧设备属性(双击可增加关键帧)

 

任何组件以及材质的属性都可进行动画处理,即使是自定义脚本组件的公共变量

时间线

 

可以单击时间线上的任何位置预览或修改动画片段

数字显示为秒数和帧数(60帧为1秒)

例如:1:30表示1秒和30帧

 

(当前目标片段播放哪个)

常用API函数

bool isPlay=animation.isPlaying;

bool isPlay=animation.IsPlaying(“动画名”);

目前是否正在播放动画?

animation.Play(“动画名”);

播放没有混合的动画。

animation.PlayQueued(“动画名”);

在先前的动画播放完毕后再播放动画。

Animation.CrossFade(“动画名”);

在后续 time 秒的时间段内,使名称为 animation 的动画淡入,使其他动画淡出。

Animation[“动画名”].speed=-1(倒着播)/0/1/2;

animation[“动画名”].wrapMode=WrapMode.PingPong;

应如何处理超出此剪辑播放范围的时间?

animation[“动画名”].length;

animation[“动画名”].time;

 

 

 

 

 

 

需求:开门关门的动画

代码如下:

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

public class EnemyDemo : MonoBehaviour
{
    
}
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class doorDemo : MonoBehaviour

{

    public bool doorState = false;//默认关门状态:开门操作

    public string animName = "door";

    private Animation anim;//为了找动画组件

    // Start is called before the first frame update

    void Start()

    {//找引用

        anim = GetComponent<Animation>();

    }

    // Update is called once per frame

    void OnMouseDown()

    {

        //如果开门状态

        if(doorState)//如果ture

        {

            //关门操作:倒放

            if(anim.isPlaying==false)

            {

                //从最后开始

                anim[animName].time = anim[animName].length;

            }

            anim[animName].speed = -1;

        }

        else

        {

            //开门操作:正播放

            anim[animName].speed = 1;

        }

        anim.Play(animName);

        doorState = !doorState;//动画播放了,状态就得改

    }

}