Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
关于丛林战争,动作切换的问题
Bean_T发起了问答2017-09-27
4
回复
516
浏览

我玩老师的实例时 鼠标点击会面向会直接转向鼠标的位置,

而我自己的就不行,比如我往 左跑的时候  点击角色右方(反反向),箭头的位置就会在左方那边生成来射出,

这样就会射到自己。。就是面向不会及时转会过来。这是为什么呢,我查了下跟老师的源码几乎一样的.不知道还有什么地方没设置好

所有回复
  • siki 2017-09-28

    在控制射箭的时候,先控制任务转向朝向 鼠标点击的方向,再实例化箭

    这两步操作要放在同一个地方完成,这样应该就没问题了

    • Bean_T 2017-09-29

      if (anim.GetCurrentAnimatorStateInfo(0).IsName("Grounded"))
      {
      if (Input.GetMouseButtonDown(0))
      {
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
      RaycastHit hit;
      bool isCollider = Physics.Raycast(ray, out hit);
      Vector3 targetPosition = hit.point;
      targetPosition.y = transform.position.y;
      shootdir = targetPosition - transform.position;//鼠标点击 箭头生成的方向
      transform.rotation = Quaternion.LookRotation(shootdir);//控制面向
      anim.SetTrigger("Attack"); //控制角色动作
      Invoke("Shoot",0.3f);// 实例箭
      facade.PlayNormalSound(AudioManager.Sound_Alert);

      }
      }
      }

      这是攻击时的脚本...按老师所说的,但还是无法先转向(跑动过程中突然鼠标点击反方向,就好像跑动的动作还没停止就开始攻击动作了,但是面向没转过来)

      下面是跑动的脚本

      void FixedUpdate ()
      {

      if (anim.GetCurrentAnimatorStateInfo(0).IsName("Grounded")==false)
      {
      return;
      }
      float h = Input.GetAxis("Horizontal");
      float v = Input.GetAxis("Vertical");
      if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0)
      {
      transform.Translate(new Vector3(h, 0, v) * speed * Time.deltaTime, Space.World);
      transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));

      float res = Mathf.Max(Mathf.Abs(h), Mathf.Abs(v));
      forward = res;
      anim.SetFloat("Forward", res);
      }

      }

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-09-29

    Invoke("Shoot",0.3f);// 实例箭这里你是等了0.3秒后才开始射箭的,这个时候人物可能已经回到原来的朝向了,你就获取不到现在的朝向了

    你可以定义一个private Rotation r;private Vector3 pos;的变量,保存现在的朝向和现在的箭的位置,然后在shoot里面通过这个变量获取朝向和位置

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!