找回密码
 立即注册
查看: 3554|回复: 56

[脚本] Rpg小游戏制作心得(第二天)

[复制链接]
发表于 2015-1-27 17:50 | 显示全部楼层 |阅读模式
今天我们来实现角色攻击的教程 大家有什么问题还有意见可以来我们蛮牛教育群390835120 来一起讨论  本人也是小白  所以还有好多要学习的
那我们开始吧 上回我们 做了 角色的移动  那么攻击也是会用到 动画的切换
所以老样子  打开之前的  Animator Controller  我们把需要攻击的动画添加进来
这个有3个  3连击的 我之前也发过类似的帖子 大家如有不明白的话也可以看我之前发的帖子   控制动画肯定要有条件 所以 建立 一个int 变量  取名叫attack
连线Idle---->attack1  int=1   attack1---->attack2   int=2  attack2---->attack3
  3个攻击都可以返回idle 状态  返回的那些线的变量  Int=0



然后 我们来用代码控制

[code=csharp]using UnityEngine;
using System.Collections;

public class PlayMove : MonoBehaviour {


    private Animator anim;
    private NavMeshAgent nav;
    private LayerMask mask = -1;
    private AnimatorStateInfo animSta;
    RaycastHit hit;
    private const string IdleState = "Sword-Idle";
    private const string Attack1State = "Sword-Attack1";
    private const string Attack2State = "Sword-Attack2";
    private const string Attack3State = "Sword-AttackCritical";
    private int HitCount = 0;
  void Start () {
        
        anim = gameObject.GetComponent<Animator>();
        nav=gameObject.GetComponent<NavMeshAgent>();
        anim.SetBool("move", false);
        mask = LayerMask.GetMask("ground");
  }
  
  
  void Update () {
        
        if (Input.GetMouseButtonDown(0))
        {
            move();
        }
        distance();
           
           //获取动画信息
        
           animSta = anim.GetCurrentAnimatorStateInfo(0);
        
        if(Input.GetKey(KeyCode.A)){
            attack();

        }
        if (!animSta.IsName(IdleState) && animSta.normalizedTime > 1.0f)
        {
            anim.SetInteger("attack", 0);
            HitCount = 0;
        }
   
   
    }

    void attack()
    {             //如果动画名字为 IdleState的值 攻击次数为0 动画时间大于0.5 播放attack1动画
        if (animSta.IsName(IdleState) && HitCount == 0 && animSta.normalizedTime > 0.50f)
        {
            anim.SetInteger("attack", 1);
            HitCount = 1;
           
        }
        else       //如果动画名字为 IdleState的值 攻击次数为1 动画时间大于0.65 播放attack2动画
            if (animSta.IsName(Attack1State) && HitCount == 1 && animSta.normalizedTime > 0.65f)
            {
                anim.SetInteger("attack", 2);
                HitCount = 2;
            }
            else     //如果动画名字为 IdleState的值 攻击次数为2 动画时间大于0.7 播放attack2动画
                if (animSta.IsName(Attack2State) && HitCount == 2 && animSta.normalizedTime > 0.70f)
                {
                    anim.SetInteger("attack", 3);
                    HitCount = 3;

                }
    }

    void move()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
      
        if (Physics.Raycast(ray, out hit,100,mask))
        {
            nav.SetDestination(hit.point);
            anim.SetBool("move", true);
        }
      
    }
    void distance()
    {
        if ((transform.position - hit.point).sqrMagnitude<0.1f)
        {
            
            anim.SetBool("move", false);
        }
    }


}
[/code]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2015-5-6 21:46 | 显示全部楼层
学习了。。。。
发表于 2017-5-5 13:22 | 显示全部楼层
很不错
发表于 2017-5-5 13:54 | 显示全部楼层
楼主是超人
发表于 2017-5-5 13:28 | 显示全部楼层
真心顶
发表于 2017-5-5 13:28 | 显示全部楼层
说的非常好
发表于 2017-5-5 13:35 | 显示全部楼层
LZ真是人才
发表于 2017-6-28 14:43 | 显示全部楼层
很不错
发表于 2017-6-28 15:14 | 显示全部楼层
楼主是超人
发表于 2017-6-28 15:05 | 显示全部楼层
好帖就是要顶
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-27 23:07 , Processed in 0.224097 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表