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

(61评价)
价格: 2208.00元
【吃豆人】不理解valid此方法的用法
长颈鹿发起了问答2018-01-29
1
回复
782
浏览

 不理解valid方法参数里的vector2 dir是以怎样的逻辑获得向量的?

以我的理解valid是方法,返回的是bool类型,那么方法参数里不应该是bool类型的吗?

主要不明白dir为什么可以通过按键控制获得x,y的坐标。

using UnityEngine;

public class PacmanMove : MonoBehaviour {

    private float speed = 0.25f;
    private Vector2 dest = Vector2.zero;

    private void Start()
    {
        dest = transform.position;        
    }

    private void FixedUpdate()
    {        
        Vector2 temp = Vector2.MoveTowards(transform.position, dest, speed);        
        GetComponent<Rigidbody2D>().MovePosition(temp);
        if (Input.GetKey(KeyCode.B)) {
            
        }
        if ((Vector2)transform.position == dest) {
            if ((Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))&&Valid(Vector2.up))
            {
                dest = (Vector2)transform.position + Vector2.up;
                
            }
            if ((Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) && Valid(Vector2.left))
            {
                dest = (Vector2)transform.position + Vector2.left;
            }
            if ((Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) && Valid(Vector2.down))
            {
                dest = (Vector2)transform.position + Vector2.down;
            }
            if ((Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) && Valid(Vector2.right))
            {
                dest = (Vector2)transform.position + Vector2.right;
            }
        }
         
    }
    private bool Valid(Vector2 dir) {
        Vector2 pos = transform.position;
        RaycastHit2D hit = Physics2D.Linecast(pos+dir, pos);
        Debug.Log(dir);
        return (hit.collider == GetComponent<Collider2D>());
    }
}

 

所有回复
  • 老师_Bathur 2018-01-29

    您好,我们通过update里的按键检测,根据按下的键来设置需要的dir值,再传给valid进行检测,至于为什么进去V2出来bool是因为V2进去之后我们利用它做了判断,得到了bool的结果

     

    总之,dir是我们根据按键反馈指定的

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