UnityAPI学习之Transform组件和其Vector类的基本使用

目录

Transform组件

访问与获取

Transform的位置和旋转信息

Transform局部坐标和旋转信息的获取

Transform的缩放与正方向

缩放(Scale)

正方向

Transform相关的查找方法

销毁游戏物体

Vector2

Vector2的静态变量

Vector2的构造函数与成员变量

Vector2中的运算符

MoveTowards控制物体移动

平滑阻尼控制物体移动


Transform组件

访问与获取

现在创建一个容器放置GrisGO物体的、Transform组件并输出其名字

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);
            
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Transform的位置和旋转信息

示例1:获取GrisGO的位置信息和旋转信息

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

示例2:

在以上实例中,获取的旋转信息是以四元数的形式表示出来(如在rotation属性中,x=1.58,但实际输出的四元数为0.01379),现在要将rotation属性以其原本的数值(欧拉角/度)形式展现出来

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);
        Debug.Log("GrisGO以欧拉角/度的形式表示旋转结果为" + GrisTrans.eulerAngles);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Transform局部坐标和旋转信息的获取

局部坐标:子级相对于父级的位置信息

示例:输出GrisGO的局部坐标和旋转欧拉角

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO局部坐标为" + GrisTrans.localPosition);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);
        Debug.Log("GrisGO以欧拉角/度的形式表示旋转结果为" + GrisTrans.eulerAngles);
        Debug.Log("GrisGO的局部欧拉角/度的形式表示旋转结果为" + GrisTrans.localEulerAngles);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Transform的缩放与正方向

缩放(Scale)

对于Scale属性,只有局部缩放LocalScale

示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        /*Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO局部坐标为" + GrisTrans.localPosition);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);
        Debug.Log("GrisGO以欧拉角/度的形式表示旋转结果为" + GrisTrans.eulerAngles);
        Debug.Log("GrisGO的局部欧拉角/度的形式表示旋转结果为" + GrisTrans.localEulerAngles);*/
        Debug.Log("GrisGO的局部缩放为" + GrisTrans.localScale);


    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

正方向

正方向即关于xyz轴所指的方向,其中分为有相对于世界空间的正方向和本地正方向(若无父级,则本地正方向与世界正方向相同),根据实际开发中的需求不同,调整相应的世界空间或者本地正方向的数值大小

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        /*Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO局部坐标为" + GrisTrans.localPosition);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);
        Debug.Log("GrisGO以欧拉角/度的形式表示旋转结果为" + GrisTrans.eulerAngles);
        Debug.Log("GrisGO的局部欧拉角/度的形式表示旋转结果为" + GrisTrans.localEulerAngles);*/
        ///Debug.Log("GrisGO的局部缩放为" + GrisTrans.localScale);
        Debug.Log("GrisGO关于x轴的正方向为" + GrisTrans.right);
        Debug.Log("GrisGO关于y轴的正方向为" + GrisTrans.up);
        Debug.Log("GrisGO关于z轴的正方向为" + GrisTrans.forward);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Transform相关的查找方法

示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO5_Transform : MonoBehaviour
{
    public GameObject GrisGO;
    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log(GrisGO.transform);
        Transform GrisTrans = GrisGO.transform;
        /*Debug.Log("GrisGO所挂载的物体的transform组件的名字为:" + GrisTrans);
        Debug.Log("GrisGO所挂载的游戏物体引用为" + GrisTrans.gameObject);
        Debug.Log("GrisGO下的子物体(Transform)个数为" + GrisTrans.childCount);*/
        /*Debug.Log("GrisGO世界空间的坐标位置为" + GrisTrans.position);
        Debug.Log("GrisGO局部坐标为" + GrisTrans.localPosition);
        Debug.Log("GrisGO以四元数形式表示的旋转是" + GrisTrans.rotation);
        Debug.Log("GrisGO以欧拉角/度的形式表示旋转结果为" + GrisTrans.eulerAngles);
        Debug.Log("GrisGO的局部欧拉角/度的形式表示旋转结果为" + GrisTrans.localEulerAngles);*/
        ///Debug.Log("GrisGO的局部缩放为" + GrisTrans.localScale);
        Debug.Log("GrisGO关于x轴的正方向为" + GrisTrans.right);
        Debug.Log("GrisGO关于y轴的正方向为" + GrisTrans.up);
        Debug.Log("GrisGO关于z轴的正方向为" + GrisTrans.forward);


        //查找
        Debug.Log("当前脚本挂载的游戏对象下的叫Gris的子对象身上的Transform组件是" + transform.Find("Gris"));
        //索引
        Debug.Log("当前脚本挂载的游戏对象下的叫Gris的子对象身上的Transform组件是" + transform.GetChild(0));
        Debug.Log("Gris当前在此父对象同级里所在的索引位置" + GrisTrans.GetSiblingIndex());
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

销毁游戏物体

Transform.Destroy(GrisGO);

Vector2

Vector2的静态变量

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO6_Vector : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //静态变量
        print(Vector2.down);
        print(Vector2.up);//y轴正方向
        print(Vector2.left);
        print(Vector2.right);//x轴正方向
        print(Vector2.one);
        print(Vector2.zero);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Vector2的构造函数与成员变量

示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO6_Vector : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //静态变量
        /*print(Vector2.down);
        print(Vector2.up);//y轴正方向
        print(Vector2.left);
        print(Vector2.right);//x轴正方向
        print(Vector2.one);
        print(Vector2.zero);*/

        //构造函数
        Vector2 v2 = new Vector2(2, 2);
        print("v2向量是" + v2);
        //成员变量
        print("v2向量的模长为" + v2.magnitude);
        print("v2向量模长的平方是" + v2.sqrMagnitude);
        print("v2向量单位化之后是" + v2.normalized);//单位话就是使其模为1
        //单独访问v2的xy
        print("v2向量的xy值分别为" + v2.x + "," + v2.y);
        print("v2向量的xy值分别为(使用索引器形式访问):" + v2[0] + "," + v2[1]);

        //公共函数
        bool equal = v2.Equals(new Vector2(1, 1));
        print("v2向量与向量(1,1)是否相等?" + equal);
        v2.Set(5, 9);
        print("v2向量是" + v2);

        //静态函数
        //计算向量的夹角
        Vector2 va = new Vector2(1, 0);
        Vector2 vb = new Vector2(0, 1);
        float D = Vector2.Angle(va, vb);
        Debug.Log("从va指向vb方向计算的无符号夹角是:" + D);
        //计算向量之间的有符号夹角//Unity默认以逆时针为正向
        print("va到vb之间的有符号夹角为" + Vector2.SignedAngle(va, vb));
        print("vb到va之间的有符号夹角为" + Vector2.SignedAngle(vb, va));

        //计算两点之间的距离
        print("va与vb之间的距离" + Vector2.Distance(va, vb));
        print("va与vb之间的点积" + Vector2.Dot(va, vb));

        //Max与Min
        print("va与vb在其各方向的最大分量组成的向量为" + Vector2.Max(va, vb));
        Vector2.Max(new Vector2(2, 3), new Vector2(3, 2));

        //向量的线性插值方法a+(b-a)*t
        print("va,vb按照0.5的比例(有限制)进行线性插值变化之后的结果是:"+Vector2.Lerp(va, vb, 0.5f));
        print("va,vb按照-1的比例(无限制)进行线性插值变化之后的结果是:" + Vector2.LerpUnclamped(va, vb, -1f));
        //点朝向目标移动的方法//只移动一次
        float maxDistance = 0.5f;//步频
        print("将点va向vb以0.5的步频移动"+Vector2.MoveTowards(va, vb, maxDistance));

        //
        print("va和vb在各个方向上的分量相乘得到的新向量是" + Vector2.Scale(va, vb));
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Vector2中的运算符

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO6_2_Vector : MonoBehaviour
{
    Vector2 va = new Vector2(1, 0);
    Vector2 vb = new Vector2(0, 1);
    // Start is called before the first frame update
    void Start()
    {
        //运算符
        print("va加上vb向量是" + (va + vb));
        print("va减去vb向量是" + (va - vb));
        print("va乘以vb向量是" + (va * vb));
        print("va与vb是同一个向量么" + (va == vb));
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

MoveTowards控制物体移动

介绍
MoveTowards是Unity引擎中的一个方法,用于在两个点之间进行平滑移动。它可以使游戏对象从当前位置移动到目标位置,通过在每一帧更新位置,实现平滑的移动效果。

方法
MoveTowards方法有以下参数:

当前位置(current):表示游戏对象当前的位置。
目标位置(target):表示游戏对象要移动到的目标位置。
移动速度(maxDistanceDelta):表示每一帧游戏对象移动的最大距离。
返回值:返回移动后的新位置。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO6_2_Vector : MonoBehaviour
{
    public float Lerpspeed;
    public float percent;
    Vector2 va = new Vector2(1, 0);
    Vector2 vb = new Vector2(0, 1);
    public Transform grisTrans;
    public Transform TargetTrans;
    // Start is called before the first frame update
    void Start()
    {
        /*//运算符
        print("va加上vb向量是" + (va + vb));
        print("va减去vb向量是" + (va - vb));
        print("va乘以vb向量是" + (va * vb));
        print("va与vb是同一个向量么" + (va == vb));*/
    }

    // Update is called once per frame
    void Update()
    {
        //grisTrans.position = Vector2.Lerp(grisTrans.position, TargetTrans.position,0.1f);
        percent += 1 * Lerpspeed * Time.deltaTime;
        grisTrans.position = Vector2.Lerp(grisTrans.position, TargetTrans.position, percent);

        grisTrans.position = Vector2.MoveTowards(grisTrans.position, TargetTrans.position, percent);
    }
}

平滑阻尼控制物体移动

public static Vector2 SmoothDamp(Vector2 current, Vector2 target, ref Vector2 currentVelocity, float smoothTime, float maxSpeed);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值