unity 动画控制器

unity 可以用两种方式控制动画

1. Animation

Animation an;//动画组件

void Start()

{

an = GetComponent<Animation>(); //获取动画组件

}

public enum PlayerState
    {
        Idle,
        Fire,
        Reload,
        Melee 
    }

void PlayAnimation(GameRes.PlayerState ps)
    {
        switch (ps)
        {
            case GameRes.PlayerState.Idle:
                an.Play("Idle");
                break;
            case GameRes.PlayerState.Fire:
                an.Play("Fire");
                break;
            case GameRes.PlayerState.Reload:
                an.Play("Reload");
                break;
            case GameRes.PlayerState.Melee:
                an.Play("Melee");
                break;
            default:
                break;
        }
    }

2.Animator

//检查是否正在播放jump动画.
AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0);   
bool playingJump = stateinfo.IsName("jump");
if(playingJump)
{
    if(stateinfo.normalizedTime < 1.0f)
    {
        //正在播放
    }
    else
    {
        //播放结束
    }
    
}
控制播放时间

Animator ator = go1.GetComponent<Animator>();
var stateinfo = ator.GetCurrentAnimatorStateInfo(0);
if(stateinfo.IsName("Jump"))
{
    ator.speed = 2;
}
用Animator实现人物,走、跑。

void Move()
    {
        Vector3 dir = Vector3.zero;
        if (character.isGrounded)
        {
            float h = Input.GetAxis("Horizontal") * speed;
            float v = Input.GetAxis("Vertical") * speed;
            dir = new Vector3(h, 0, v);
            if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0&&po)
            {
                an.SetInteger("Walk", 5);
                if (!ac.isPlaying)
                {
                    ac.PlayOneShot(Clip);
                }
                transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
            }
            else if (Input.GetKeyDown(KeyCode.K))
            {
                if (p)
                {
                    an.SetInteger("Run", 4);
                    po = false;
                    if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0 && po == false)
                    { 
                        transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
                    }                
                    p = !p;
                }
                else
                {
                    po = true;
                    an.SetInteger("Run", 2);
                    p = !p;
                }
            }
            else if (Input.GetKeyDown(KeyCode.L))
            {
                if (q)
                {
                    an.SetInteger("Sneak", 2);
                    q = !q;
                }
                else
                {
                    an.SetInteger("Sneak", 0);
                    q = !q;
                }
            }
            else
            {
                an.SetInteger("Walk", 3);
            }
        }
        character.SimpleMove(dir);
    }

实现摄像机跟随 

 private Transform player;
    public float x=4, y=5;
    public float speed = 2;
    void Start()
    {
        //通过标签获取游戏中的对象
        player = GameObject.FindWithTag("Player").transform;
    }
    void Update()
    {
        if (player != null)
        {
            //计算出摄像机的目标位置,即玩家角色的位置+摄像机的偏移值
            Vector3 targetPos = player.position + new Vector3(0, x, y);
            //设置摄像机位置
            transform.position = Vector3.Lerp(transform.position, targetPos, speed * Time.deltaTime);
            //计算出摄像机面向玩家角色的旋转角度
            Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
            //设置摄像机旋转
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
        }
    }

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值