18.Transform变换组件缩放和看向

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

×

喜欢就点赞,疼爱就打赏