Unity基于URP的模型Slice方法。

36 篇文章 2 订阅

        目前是使用透明剪切的方式实现的,暂时没有办法把透明和不透明的Shader到一起,就分成两个Shader来做。首先是不透明的:

         其次是透明的:

        为了能够看清楚切片的平面,写了一个脚本,用于显示这个切片,内容如下:

using UnityEngine;

public class SliceShow : MonoBehaviour
{
	[SerializeField]
	float size = 1;
	[SerializeField]
	Color color = Color.red;

	void OnDrawGizmos()
	{
		MeshRenderer render = GetComponent<MeshRenderer>();
		if (!render) return;
		Material mat = render.material;
		if (!mat) return;
		if (!mat.HasVector("_SlicePoint")) return;
		if (!mat.HasVector("_SliceDirection")) return;

		Vector3 slicePoint = mat.GetVector("_SlicePoint");
		Vector3 sliceDirection = mat.GetVector("_SliceDirection");

		Gizmos.color = color;

		Gizmos.matrix = transform.localToWorldMatrix;

		Gizmos.DrawSphere(slicePoint, 0.01f);

		Vector3 p1;
		Vector3 p2;
		Vector3 p3;
		Vector3 p4;
		if (Mathf.Approximately(sliceDirection.x,0) && Mathf.Approximately(sliceDirection.y, 0))
		{
			p1 = slicePoint + new Vector3(1,1) * size;
			p2 = slicePoint + new Vector3(1, -1) * size;
			p3 = slicePoint + new Vector3(-1, 1) * size;
			p4 = slicePoint + new Vector3(-1, -1) * size;
		}
		else
		{
			Vector3 v0 = Vector3.Cross(Vector3.forward ,sliceDirection).normalized * size;
			Vector3 v1 = -v0;
			Vector3 v2 = Vector3.Cross(v1, sliceDirection).normalized * size;
			Vector3 v3 = -v2;
			p1 = slicePoint + (v0 + v2);
			p2 = slicePoint + (v1 + v2);
			p3 = slicePoint + (v0 + v3);
			p4 = slicePoint + (v1 + v3);
		}
		Gizmos.DrawLine(p1, p2);
		Gizmos.DrawLine(p3, p4);
		Gizmos.DrawLine(p1, p3);
		Gizmos.DrawLine(p2, p4);
		Gizmos.DrawLine(p1, p4);
		Gizmos.DrawLine(p2, p3);
	}
}

 好了,就到这里:)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
切片过程 1)开始切片过程,在Unity编辑器顶部选择地形选项,然后单击“切片地形”选项。一个窗口会出现一些配置信息。 2)拖动您希望分割为“地形切片”字段的地形。或者,如果您在步骤1中单击“切片地形”选项时选择了地形,则该字段中已经出现了地形。 3)输入每个补丁的详细分辨率。优选地,该值应与每个补丁值的基本地形细节分辨率匹配。这些信息不能通过脚本访问,这就是为什么你必须在这里输入它。您可以输入与基础地形设置不同的值,但这将导致细节网格(植物和草地)复制的准确性降低。 4)选择您希望结束的切片维度。2×2仅仅意味着基本地形将沿着X轴2次和Z轴2次分割,以创建4个地形片。64×64未经测试,不建议使用,所以请自行承担风险。 5)设置希望存储地形数据的文件路径。默认情况下,这是资产/ terrainslicing /地形数据。如果您希望暂时在另一个文件夹中创建地形数据,只需在这里输入新路径。如果希望永久更改默认文件夹,请输入新的文件路径,并选择“保存当前文件路径作为默认文件路径”按钮。请确保没有“/”后的文件路径上的文件夹名称(例如,用于文件的默认路径的地形数据后),否则将会出现错误。 6)当单击“创建地形”按钮时,选择是否覆盖现有的地形数据。这是一个安全功能,以确保你不小心覆盖的地形数据,你已经创造了。如果试图在未选中此值时重写数据,则会出现警告消息,告诉您要检查此值,而切片操作将不会开始。 7)单击“创建地形”按钮,等待进度条填充。如果进度条未显示,则在编辑器窗口显示通知错误的通知消息。有时您可能需要检查控制台以获得更详细的信息。最后,确保只在编辑模式下执行切片地形脚本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值