您当前的位置: 首页 >  unity

幻世界

暂无认证

  • 0浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Unity开发小技巧】unity三角函数和向量的使用

幻世界 发布时间:2021-03-29 14:15:04 ,浏览量:0

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群

一:向量的点乘和叉乘以及三角函数的运算

基本上用不到,但是有时候很简单的计算却需要用到,每次使用总是生疏,总结一下,以后就可以随时来看

 public Vector3 pointA;
    public Vector3 pointB;
    public Vector3 pointC;
    void Start()
    {
        pointA = new Vector3(0, 0, 0);
        pointB = new Vector3(0, 1, 0);
        pointC = new Vector3(0, 0, 1);

        //向量的运算(求两点的方向)
        Vector3 aTob = pointB - pointA;

        //-------------------------------------------------向量模
        //计算ab两点之间的距离/向量模的三种方法
        //方法一,求三维向量的平方和的平方根
        float m01 = Mathf.Sqrt(Mathf.Pow(aTob.x, 2) + Mathf.Pow(aTob.y, 2) + Mathf.Pow(aTob.z, 2));
        //方法二,magnitude, Returns the length of this vector
        float m02 = aTob.magnitude;
        //方法三,Vector3.Distance
        float m03 = Vector3.Distance(pointA, pointB);

        //-------------------------------------------------向量归一化
        //方法一
        Vector3 n01 = aTob / aTob.magnitude;
        //方法二
        Vector3 n02 = aTob.normalized;

        //-------------------------------------------------向量的运算
        //点ab也就是向量pointA,pointB之间的夹角,度数
        float degree = Vector3.Angle(pointA, pointB);
        //向量点乘
        float resultOfDot = Vector3.Dot(pointA, pointB);
        //由点乘结果求两向量的夹角时,必须先对两向量归一化处理,或者最后除以两向量模长的乘积再求反余弦
        float resultOfDot01 = Vector3.Dot(pointA.normalized, pointB.normalized);
        float angle01 = Mathf.Acos(resultOfDot01) * Mathf.Rad2Deg;
        //向量叉乘
        Vector3.Cross(pointA, pointB);
        
        //当叉乘大于0时,两向量的夹角小于180度; 当叉乘小于0时,两向量的夹角大于180度。
        Vector3 resultOfCross01 = Vector3.Cross(pointA.normalized, pointB.normalized);
        float angle02 = Mathf.Asin(resultOfCross01.magnitude) * Mathf.Rad2Deg;
    }
二:反弹处理 

 

 private Vector2 startSpeed = new Vector2(5, 5);//初速度。大小方向

    private void Update()
    {
        transform.Translate(startSpeed * Time.deltaTime);
    }
    public void OnCollisionEnter2D(Collision2D collision)
    {
        //碰撞点法线
        ContactPoint2D contactPoint = collision.contacts[0];
        //根据入射角和法线 计算反射角
        Vector2 newDir = Vector2.Reflect(startSpeed, contactPoint.normal);
        startSpeed = newDir;
    }

关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.0428s