35.Gizmos颜色立方体视锥跟随旋转

  1. 35.Scene窗口拓展-Gizmos-颜色立方体视锥跟随旋转
    1. 35.1 知识点
      1. Gizmos修改颜色
      2. Gizmos绘制立方体
      3. Gizmos绘制视锥
      4. 如何改变绘制内容的角度
    2. 35.2 知识点代码

35.Scene窗口拓展-Gizmos-颜色立方体视锥跟随旋转


35.1 知识点

Gizmos修改颜色

Gizmos.color = Color.xx;

private void OnDrawGizmosSelected()
{
    // Gizmos绘制立方体
    Gizmos.color = Color.green;
}

Gizmos绘制立方体

Gizmos.DrawCube(中心点, 大小);
Gizmos.DrawWireCube(中心点, 大小);

private void OnDrawGizmosSelected()
{
    // Gizmos绘制立方体
    Gizmos.color = Color.green;
    Gizmos.DrawCube(Vector3.zero, Vector3.one);
    Gizmos.color = Color.red;
    Gizmos.DrawWireCube(this.transform.position, new Vector3(2, 1, 3));
}

Gizmos绘制视锥

Gizmos.DrawFrustum(绘制中心, FOV(Field of View,视野)角度, 远裁切平面, 近裁切平面, 屏幕长宽比);

private void OnDrawGizmosSelected()
{
    // Gizmos绘制视锥
    Gizmos.color = Color.yellow;
    Gizmos.DrawFrustum(this.transform.position, 30, 50, 0.5f, 1.7f);
}

如何改变绘制内容的角度

注意:Gizmos绘制立方体和视锥是不能跟随对象旋转的,我们要自行处理

修改Gizmos绘制前的矩阵
Gizmos.matrix
Gizmos.matrix = Matrix4x4.TRS(位置, 角度, 缩放);
还原矩阵
Gizmos.matrix = Matrix4x4.identity

private void OnDrawGizmosSelected()
{
    // 将绘制矩阵还原,以下绘制的对象不会跟随旋转
    Gizmos.matrix = Matrix4x4.identity;

    // Gizmos绘制立方体
    Gizmos.color = Color.green;
    Gizmos.DrawCube(Vector3.zero, Vector3.one);
    Gizmos.color = Color.red;
    Gizmos.DrawWireCube(this.transform.position, new Vector3(2, 1, 3));

    // Gizmos绘制视锥
    Gizmos.color = Color.yellow;
    Gizmos.DrawFrustum(this.transform.position, 30, 50, 0.5f, 1.7f);

    // 将绘制矩阵该为某个对象的,这样就可以跟着移动、旋转、缩放了
    Gizmos.matrix = Matrix4x4.TRS(this.transform.position, this.transform.rotation, Vector3.one);
    Gizmos.color = Color.white;
    //绘制会跟随对象旋转的空心立方体
    Gizmos.DrawWireCube(Vector3.zero, new Vector3(2, 1, 4));
}


35.2 知识点代码

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

public class Lesson35_Scene窗口拓展_Gizmos_颜色立方体视锥跟随旋转 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 Gizmos修改颜色

        //Gizmos.color = Color.green;

        #endregion

        #region 知识点二 Gizmos绘制立方体

        //Gizmos.DrawCube(中心点, 大小);
        //Gizmos.DrawWireCube(中心点, 大小);

        #endregion

        #region 知识点三 Gizmos绘制视锥

        //Gizmos.DrawFrustum(绘制中心, FOV(Field of View,视野)角度, 远裁切平面, 近裁切平面, 屏幕长宽比); 

        #endregion

        #region 知识点四 如何改变绘制内容的角度

        //注意:Gizmos绘制立方体和视锥是不能跟随对象旋转的,我们要自行处理

        //修改Gizmos绘制前的矩阵
        //Gizmos.matrix
        //Gizmos.matrix = Matrix4x4.TRS(位置, 角度, 缩放);
        //还原矩阵
        //Gizmos.matrix = Matrix4x4.identity

        #endregion
    }

    private void OnDrawGizmosSelected()
    {
        //将绘制矩阵还原 那么以下绘制的对象不会跟随旋转
        Gizmos.matrix = Matrix4x4.identity;

        //Gizmos绘制立方体
        Gizmos.color = Color.green;
        Gizmos.DrawCube(Vector3.zero, Vector3.one);
        Gizmos.color = Color.red;
        Gizmos.DrawWireCube(this.transform.position, new Vector3(2, 1, 3));

        //Gizmos绘制视锥
        Gizmos.color = Color.yellow;
        Gizmos.DrawFrustum(this.transform.position, 30, 50, 0.5f, 1.7f);


        //将绘制矩阵该为某个对象的 这样就可以跟着 移动 旋转 缩放了
        // Gizmos.matrix = Matrix4x4.TRS(this.transform.position, this.transform.rotation, transform.localScale);
        // Gizmos.matrix = this.transform.localToWorldMatrix;//这句代码和上一行的作用一致
        //不想跟随缩放的话最后一个参数写死单位向量1即可
        Gizmos.matrix = Matrix4x4.TRS(this.transform.position, this.transform.rotation, Vector3.one);
        Gizmos.color = Color.white;
        Gizmos.DrawWireCube(Vector3.zero, new Vector3(2, 1, 4));
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏