找回密码
 立即注册
查看: 203|回复: 0

unity-向量的加减

[复制链接]
发表于 2022-12-28 20:30 | 显示全部楼层 |阅读模式
向量标准化(归一化)


向量标准化,就是向量除以本身的模长。
using UnityEngine;using System.Collections;public class VectorDemo : MonoBehaviour {    // Use this for initialization    void Start () {        }        // Update is called once per frame    void Update () {        drawMagnitude ();//test vector normalized    }    private void drawMagnitude(){        Vector3 pos = this.transform.position;        Debug.DrawLine (Vector3.zero,pos);        //both ok        Vector3 nor1 = pos / pos.magnitude;        Vector3 nor2 = pos.normalized;        Debug.DrawLine (Vector3.zero,nor2,Color.red);    }}

1.png

向量减法


向量的减法,可以用来计算两点之间的距离和相对方向。
注意减法的方向,a-b表示指向a。
using UnityEngine;using System.Collections;public class VectorDemo1 : MonoBehaviour {    public Transform tr1,tr2;    // Use this for initialization    void Start () {        }        // Update is called once per frame    void Update () {        minusVector ();    }    private void minusVector(){        Vector3 relativeDirection = tr1.position - tr2.position;//world         Debug.DrawLine (Vector3.zero,relativeDirection);    }}

2.png

向量减法的结果,是相对于世界坐标的原点。
向量加法


可以表示物体的移动。
我们通过向量减法,可以获取到物体移动的方向。如果让某物体沿着这个方向移动,可以加上标准化向量即可。
using UnityEngine;using System.Collections;public class VectorDemo1 : MonoBehaviour {         public Transform tr1,tr2;    // Use this for initialization    void Start () {        }        // Update is called once per frame    void Update () {        move ();    }    private void move(){        Vector3 relativeDirection = tr1.position - tr2.position;//world         Vector3 movePos = tr2.position + relativeDirection.normalized;        if (Input.GetKey (KeyCode.A)) {            tr2.position = movePos;        }    }}

66.gif

unity给我们封装了Translate函数,可以直接调用。
using UnityEngine;using System.Collections;public class VectorDemo1 : MonoBehaviour {    public Transform tr1,tr2,tr3;    // Use this for initialization    void Start () {        }        // Update is called once per frame    void Update () {        move ();    }    private void move(){        Vector3 relativeDirection = tr1.position - tr2.position;//world         if (Input.GetKey (KeyCode.A)) {            tr3.Translate(relativeDirection.normalized);        }    }}

3.gif

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-5 11:24 , Processed in 0.093857 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表