目录
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);