对向量的处理,在控制板显示出按钮42

本文详细介绍了Unity3D中向量的基本运算,包括夹角计算、长度限制、距离测量等,并展示了如何使用点乘和叉乘进行角度与方向的计算。此外,还提供了通过GUI按钮控制物体旋转的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

得到两个向量的夹角

Vector3 v1 =newVector3(0, 0, 2);

        Vector3 v2 =newVector3(2, 0, 2);

        float degrees =Vector3.Angle(v1, v2);

        Debug.Log(degrees);

限制向量的长度不超过2

Vector3 v3 =Vector3.ClampMagnitude(v2, 2);

        Debug.Log(v3);

两个向量的距离

float distance =Vector3.Distance(v1, v2);

        Debug.Log("距离:" + distance);

得到两个向量之间的插值

Vector3 v4 =newVector3(8, 0, 0);

        Debug.Log("lerp" +Vector3.Lerp(v4, v2, 0.25f));

sqrMagnitude   得到向量的平方和

magnitude     将三个坐标的平方和再开平方

Debug.Log(Vector3.one*5)    表示三个坐标值都为5

向量的相减:

Vector3 v3 =newVector3(2, 5, 9);

Vector3 v4 =newVector3(1, 1, 1);

Vector3 result = v3 - v4;

Debug.Log("result" + result);

 

点乘       

Vector3 v1 =newVector3(2, 0, 0);

        Vector3 v2 =newVector3(2, 0, 2);

        float dotValue =Vector3.Dot(v1, v2);

        Debug.Log("点乘的结果:" + dotValue);


求Cos角度:

float temp = dotValue / (v1.magnitude *v2.magnitude); ;

       float aCosTemo =Mathf.Acos(temp);

        Debug.Log(aCosTemo +"**");     得到角度的Cos

        float degrees =Mathf.Rad2Deg* aCosTemo;

        Debug.Log(degrees);  得到角的大小

 

叉乘  得到的也是一个向量 而且是法向量

Vector3 v1 =newVector3(4, 6, 3);

Vector3 v2 =newVector3(5, 4, 2);

Vector3 ret =Vector3.Cross(v1, v2);

Debug.Log(ret);

数学知识:求x坐标是用Y坐标值和z坐标值 正序减逆序 

 

设置按钮控制物体的旋转

void OnGUI()

    {

        if (GUI.Button(newRect(20, 20, 100, 80), "Q_X"))

        {

            Quaternion q =Quaternion.identity;

            q.eulerAngles = newVector3(30, 0, 0);

            transform.rotation = q *transform.rotation;       四元数

        }

得到两排按钮分别控制物体沿X,Y,Z的旋转

        if (GUI.Button(newRect(20, 105, 100, 80), "Q_Y"))

        {

            Quaternion q =Quaternion.identity;

            q.eulerAngles = newVector3(0, 30, 0);

            transform.rotation = q *transform.rotation;

        }

        if (GUI.Button(newRect(20, 190, 100, 80), "Q_Z"))

        {

            Quaternion q =Quaternion.identity;

            q.eulerAngles = newVector3(0, 0, 30);

            transform.rotation = q *transform.rotation;

        }

        if (GUI.Button(newRect(125, 20, 100, 80), "V_X"))

        {

            transform.eulerAngles +=newVector3(30, 0, 0);

        }

        if (GUI.Button(newRect(125, 105, 100, 80), "V_Y"))

        {

            transform.eulerAngles +=newVector3(0, 30, 0);

        }

        if (GUI.Button(newRect(125, 190, 100, 80), "V_Z"))

        {

            transform.eulerAngles +=newVector3(0, 0, 30);

        }

}


圆球移动到结束位置

player.transform.position=Vector3.MoveTowards(start.transform.position,end.transform.position,0.1f);

 

模仿太阳升起,小球走的是曲线

Vector3 center = (start.transform.position +end.transform.position) / 2;

        Vector3 startCenter = start.transform.position -center;

        Vector3 endCenter = end.transform.position - center;

Vector3.Slerp(startCenter, endCenter, (Time.time - startTime) / 5) ;

       player.transform.position += center;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值