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

欢迎加入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;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值