unity-向量的加减

向量标准化(归一化)

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

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 理论部分 1. 概念 向量(vector):既有大小(magnitude )又有方向(direction)的量叫做...
    Angeladaddy阅读 14,216评论 0 4
  • 2D笛卡尔坐标系原则 1、每个2D迪卡尔坐标系都有一个特殊的点,称作原点(0,0); 2、笛卡尔坐标轴是无限延伸的...
    AlanGe阅读 909评论 0 0
  • 一、Unity简介 1. Unity界面 Shift + Space : 放大界面 Scene界面按钮渲染模式2D...
    MYves阅读 8,436评论 0 22
  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 13,202评论 3 89
  • C#问题 1.在类的构造函数前加上static会报什么错?为什么? 答:在构造函数如果有public修饰的静态构造...
    元宇宙协会阅读 9,092评论 4 17