18.Unity重要组件和API-Transform缩放和看向
18.1 知识点
缩放
lossyScale变量 相对世界坐标系的缩放大小
// 对象的全局缩放。(只读)
print(this.transform.lossyScale);
localScale变量 相对本地坐标系(父对象)的缩放大小
// 相对于 GameObjects 父对象的变换缩放。
print(this.transform.localScale);
缩放注意事项
同样缩放不能只改 xyz,只能通过 Vector3 向量一起改(相对于世界坐标系的缩放大小只能获取,不能改变)。
因此,一般要修改缩放大小都是改变相对于父对象的缩放大小 localScale。
Unity 没有提供关于缩放的 API,之前的旋转、位移都提供了对应的 API,但是缩放并没有。如果想要让缩放发生变化,只能自己去编写逻辑。
在 Update 内每帧修改缩放大小:
// this.transform.localScale += Vector3.one * Time.deltaTime;
看向
LookAt方法 让一个对象的面朝向某一个点或者某一个对象
// 看向一个点,相对于世界坐标系的
// this.transform.LookAt(Vector3.zero);
// 看向一个对象,传入一个对象的 Transform 信息
// this.transform.LookAt(lookAtObj);
总结
- 缩放
- 相对于世界坐标系的缩放只能获取,不能改变。
- 只能通过修改相对于本地坐标系(父对象)的缩放来实现。
- Unity 没有提供对应的 API 来实现缩放变化,只能自己编写逻辑。
- 看向
LookAt
方法可以让对象朝向一个点或者一个对象。- 一定要记住将其写在 Update 内,才能不停地更新。
18.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson18_必不可少Transform_缩放和看向 : MonoBehaviour
{
public Transform lookAtObj;
void Start()
{
#region 知识点一 缩放
//lossyScale变量 相对世界坐标系的缩放大小 返回Vector3向量
//对象的全局缩放。(只读)
print(this.transform.lossyScale);
//localScale变量 相对本地坐标系(父对象) 返回Vector3向量
//相对于 GameObjects 父对象的变换缩放。
print(this.transform.localScale);
#endregion
}
void Update()
{
#region 知识点一 缩放
//缩放注意事项:
//1.同样缩放不能只改xyz 只能通过Vector3向量一起改(相对于世界坐标系的缩放大小只能得 不能改)
//所以 我们一般要修改缩放大小 都是改的 相对于父对象的 缩放大小 localScale
//this.transform.localScale = new Vector3(3, 3, 3);
//2.Unity没有提供关于缩放的API
//之前的 旋转 位移 都提供了 对应的 API 但是 缩放并没有
//如果你想要 让 缩放 发生变化 只能自己去写(自己算)
//Update内 每帧修改缩放大小
//this.transform.localScale += Vector3.one * Time.deltaTime;
#endregion
#region 知识点二 看向
//LookAt方法 让一个对象的面朝向 可以一直看向某一个点或者某一个对象
//旋转变换,使向前矢量指向 target 的当前位置。
//想要一直看向在Update内写
//看向一个点 相对于世界坐标系的
//this.transform.LookAt(Vector3.zero);
//看向一个对象 就传入一个对象的 Transform信息
//this.transform.LookAt(lookAtObj);
#endregion
}
//总结:
//缩放
//相对于 世界坐标系的缩放 只能得 不能改
//只能去修改相对于本地坐标系的缩放(相对于父对象)
//没有提供对应的API来 缩放变化 只能自己算
//看向
//LookAt 看向一个点 或者一个对象
//一定记住 是写在Update里面 才会不停变化
}
18.3 练习题
使用之前的坦克预设体,让摄像机可以跟随其移动,并且一直看向坦克
场景里丢一个坦克预设体,把摄像机作为坦克的子对象
添加脚本让摄像机一直看向坦克
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform target; // 坦克的Transform组件
void Update()
{
// 让摄像机一直看向坦克
this.transform.LookAt(target);
}
}
这样,摄像机就会跟随坦克移动,并且始终保持看向坦克的方向。
18.4 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 该脚本会挂载到摄像机上
/// </summary>
public class Lesson18_练习题 : MonoBehaviour
{
public Transform target;
void Start()
{
#region 练习题一
//使用之前的坦克预设体,让摄像机可以跟随其移动,并且一直看向坦克
#endregion
}
void Update()
{
this.transform.LookAt(target);
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com