web前端

unity-向量的加减

2022-12-27  本文已影响0人  姜治宇

向量标准化(归一化)

向量标准化,就是向量除以本身的模长。

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
上一篇下一篇

猜你喜欢

热点阅读