29793人加入学习
(96人评价)
Unity中的动画系统和Timeline(Unity2017)

制作于2017-11-04

价格 免费

0.17  0.67

[展开全文]
March · 2018-05-26 · 该任务已被删除 0

262 308

[展开全文]
March · 2018-05-26 · 该任务已被删除 0

45-183

 

runleft  勾选 mirror

 

horizontal

[展开全文]
March · 2018-05-25 · 该任务已被删除 0

通过在墙附近加一个cube来判断主相机是否进入切换区域。

按shift可以左右拉长timeline

[展开全文]
Lrince · 2018-05-22 · 该任务已被删除 0

通过角色控制器(charactercontrol)来控制y轴的固定值。将跳跃后的y坐标改为0.

在动画的curve里面设置关键帧来控制角色控制器的开启和关闭。

 

代码判断控制点的值。

 

 

private int colliderID=Animator .StringToHash ("Collider");

private  CharacterController characterController;

start(){

characterController = GetComponent <CharacterController > ();}

 

if (anim .GetFloat (colliderID )>=0.05f){
            characterController .enabled =false ;
        
        }else 
        {
            characterController .enabled =true ;
        }

[展开全文]
Lrince · 2018-05-21 · 该任务已被删除 0

1.匹配的时间点得找到。

2.判断是否处于当前状态的代码

//判断当前是否处于跳墙状态
        if (anim .GetCurrentAnimatorStateInfo (0).IsName ("Vault"))

 

3.menicom的match target的功能实现

anim.MatchTarget (matchTarget, Quaternion.identity, AvatarTarget.LeftHand, new MatchTargetWeightMask (Vector3.one, 0), 0.38f, 0.5f);
        }

[展开全文]
Lrince · 2018-05-22 · 该任务已被删除 0

控制一下最短距离和最大距离

[展开全文]
Lrince · 2018-05-20 · 该任务已被删除 0

transform.position:当前脚下的位置。

 

判断脚本代码如下:

bool isVault = false;
        if (anim.GetFloat (speedZID) > 3) {
            //发射一条射线做障碍检测
            RaycastHit hit;
            if (Physics.Raycast (transform.position + Vector3.up * 0.3f, transform.forward, out hit, 2)) {
                if (hit.collider.tag == "Obstacle") {
                    isVault = true;
                }
                    
            }
        }
        anim.SetBool (vaultID, isVault);

[展开全文]
Lrince · 2018-05-19 · 该任务已被删除 0

用一个bool值来判断是否需要翻墙

用一个默认的cube来判断面前墙体的高度,用来做不同的动作。

 

 

[展开全文]
Lrince · 2018-05-19 · 该任务已被删除 0

先将Player的tagged设置为Player

在maincamera 上面创建一个脚本用来跟随人物

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

public class FollowTarget : MonoBehaviour {
    //先找到Player
    private Transform player;
    //进行位置偏移
    private Vector3 offset;
    //c差值运算的平滑度
    private float  smoothing=3;
    // Use this for initialization
    void Start () {
        //通过标签查找到角色组件
        player = GameObject.FindGameObjectWithTag ("Player").transform;
        //偏移量
        offset = transform.position - player.position;
    }
    
    // Update is called once per frame
    void LateUpdate () {
        //将offset设置为player的局部坐标。
        Vector3 targetPosition = player.position + player.TransformDirection (offset);
        //进行差值运算
        transform .position =Vector3 .Lerp (transform .position ,targetPosition ,Time .deltaTime *smoothing );
        //视线跟随
        transform.LookAt (player.position);    
    }
}
 

[展开全文]
Lrince · 2018-05-19 · 该任务已被删除 0

2Dsimple directional 不允许在一个方向上有多个动作‘

2Dfreeform  directional 方向自由,每个方向能有多个动画,但是在同一个方向上只有一个参数。

2Dfreeform  Cartesian 当动画在同一个方向上面,在同一方向上面能存在多个参数,通过多个方参数控制动画的多样性。

[展开全文]
Lrince · 2018-05-19 · 该任务已被删除 0

runright直接修改了自身的转向。通过X轴影响作用太小。

 

X轴调节方法:compute Positions->x position from->anglur (度数)

 

控制runleft(runright)d的两个PosX 值的脚本代码

//控制直行Z轴的值

anim .SetFloat( speedZID,Input .GetAxis ("Vertical")*4.0f);

//控制转向X轴的值
        anim .SetFloat (horizontalID  ,Input .GetAxis ("Horizontal")*126f);

[展开全文]
Lrince · 2018-05-19 · 该任务已被删除 0
  1. 动画分类

普通动画

ugui的按钮

2D游戏的经历动画

rootmotion

人物角色

 

  1.  普通动画创建
[展开全文]
easysmoke · 2018-05-19 · 该任务已被删除 0

混合树(2D)的使用,加入转向,让人物在x轴上有移动。

speedx    转向速度

speedZ     移动速度

 

调出完美的运动点图:

compute position->Velocity XZ

[展开全文]
Lrince · 2018-05-18 · 该任务已被删除 0

混合树的使用(1D)

将idle walk  run整合到一个混合数里面

 

* 1.如何将混合树设置为默认的输出端口

    2.控制混合树的一个参数即可完成对动作的控制,但是不够严谨判断。

[展开全文]
Lrince · 2018-05-18 · 该任务已被删除 0

mirror是将动作镜像的意思。勾选即可将动作方向运动。

 

设置左右键按下的参数。(float类型)

切换到转向有三个参数,转到跑步有一个参数

 

 

input.GetAxis 用法(GetAxis("Mouse X"),GetAxis("Mouse Y"),GetAxis("Mouse ScrollWheel"),GetAxis("Vertical "),GetAxis("Horizontal "),

      GetAxis 是个方法,需要传参数,参数为string类型,参数如下:

一:触屏类

    1.Mouse X    鼠标沿着屏幕X移动时触发

    2.Mouse Y     鼠标沿着屏幕Y移动时触发

    3.Mouse ScrollWheel      当鼠标滚动轮滚动时   

二:键盘操作类   

1.Vertical      对应键盘上面的上下箭头,当按下上或下箭头时触       

2.Horizontal   对应键盘上面的左右箭头,当按下左或右箭头时触发

[展开全文]
Lrince · 2018-05-17 · 该任务已被删除 0


public class Player : MonoBehaviour {
    //定义一个macanime变量
    public Animator anim;
    //用哈希值代替字符串变量
    private int speedID= Animator.StringToHash ("Speed");
    private  int isSpeedupID = Animator.StringToHash  ("IsSpeedup");
    // Use this for initialization
    void Start () {
        //获取状态机
        anim = GetComponent <Animator >();
    }
    
    // Update is called once per frame
    void Update () {
        //将键盘输入的值赋给Speed
        anim .SetFloat( speedID,Input .GetAxis ("Vertical"));
        //用shift键是否按下来判断是否将行走状态切换到奔跑状态
        if (Input.GetKeyDown (KeyCode.LeftShift)) {
            anim.SetBool (isSpeedupID, true);
        }
        if (Input.GetKeyUp (KeyCode.LeftShift)) {
            anim.SetBool (isSpeedupID, false );
        }
    }
}
 

[展开全文]
Lrince · 2018-07-31 · 该任务已被删除 0

//将Speed字符串变成哈希值保存,以后可以直接调用定义好的哈希值,这样会避免重复使用导致的一些变量名的错误。

public int SpeedId = Animator.StringToHash ("Speed")

 

Animator 里面的Hashtostring

;

[展开全文]
Lrince · 2018-05-13 · 该任务已被删除 0

Loop time下方属性

绿色:开始帧和结束帧非常匹配

 

创建状态机和脚本控制动画。

先在状态机里面设置float变量Speed,然后通过脚本里面的按键W使Speed的值产生改变,然后

[展开全文]
Lrince · 2018-07-31 · 该任务已被删除 0

1.骨骼隐射

    人物模型,选择Rig里面的Humanoid,apply之后,点击configure即可进入骨骼映射界面。

2.将同类型的Avatar公用同一套已经做好的模型。

     骨骼映射好了之后,会自动生成一个defaultAvatar,在目标rig下选择copy from avatar 即可。(骨骼映射不互通的模型,需自己主动)

[展开全文]
Lrince · 2018-05-13 · 该任务已被删除 0

授课教师

SiKi学院老师

课程特色

下载资料(1)
视频(57)