unity3D 引导(镂空)

2023-10-12 08:40
文章标签 引导 unity3d 镂空

本文主要是介绍unity3D 引导(镂空),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

已经好久没写博客今天我写新手必须写的新手引导(注:本文出自unity3D游戏开发这本数的案例)

shader

Shader "Unlit/Default_Mask"
{Properties{[PerRendererData] _MainTex("Sprite Texture",2D)="while"{}_Color("Tint",Color)=(1,1,1,1)_StencilComp("Stencil Comparison",Float)=8_Stencil("Stencil ID",Float)=0_StencilOp("Stencil Operation",Float)=0_StencilWriteMask("Stencil Write Mask",Float)=255_StencilReadMask("Stencil Read Mask",Float)=255_ColorMask("Color Make",Float)=15[Toggle(UNITY_UI_ALPHACLIP)]_UseUIAIphaClip("Use AIpha Clip",Float)=0_Center("Center",vector)=(0,0,0,0)_Silder("Silder",Range(0,1000))=1000}SubShader{Tags {"Queue"="Transparent""IgnoreProjector"="True""RenderType"="Transparent""PreviewType"="Plane""CanUseSpriteAtlas"="True"}Stencil{Ref[_Stencil]Comp[_StencilComp]Pass[_StencilOp]ReadMask[_StencilReadMask]WriteMask[_StencilWriteMask]}Cull OffLighting OffZWrite OffZTest [unity_GUIZTestMode]Blend SrcAlpha OneMinusSrcAlphaColorMask[_ColorMask]Pass{Name "DefauIt"CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma target 2.0#include "UnityCG.cginc"#include "UnityUI.cginc"// make fog work#pragma multi_compile__UNITY_UI_ALPHACLIPstruct appdata_t{float4 vertex : POSITION;float4 color:COLOR;float2 texcoord:TEXCOORD0;UNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f{float4 vertex : SV_POSITION;fixed4 color:COLOR;float2 texcoord:TEXCOORD0;float4 worldPosition:TEXCOORD1;UNITY_VERTEX_OUTPUT_STEREO};fixed4 _Color;fixed4 _TextureSampleAdd;float4 _ClipRect;float _Silder;float2 _Center;v2f vert (appdata_t IN){v2f OUT;UNITY_SETUP_INSTANCE_ID(IN);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);OUT.worldPosition=IN.vertex;OUT.vertex=UnityObjectToClipPos(OUT.worldPosition);OUT.texcoord=IN.texcoord;OUT.color=IN.color*_Color;return OUT;}sampler2D _MainTex;fixed4 frag (v2f IN) : SV_Target{half4 color=(tex2D(_MainTex,IN.texcoord)+_TextureSampleAdd)*IN.color;color.a*=UnityGet2DClipping(IN.worldPosition.xy,_ClipRect);#ifndef UNITY_UI_ALPHACLIPclip(color.a-0.001);#endifcolor.a*=(distance(IN.worldPosition.xy,_Center.xy)> _Silder);color.rgb*=color.a;return color;}ENDCG}}
}

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class HollowOut : MonoBehaviour
{//需要聚合的对象public Image target;//Canvas对象public Canvas canvas;private Vector4 m_Center;private Material m_Material;private float m_Diameter;private float m_Currnet = 0f;Vector3[] corners = new Vector3[4];private void Awake(){target.rectTransform.GetWorldCorners(corners);m_Diameter = Vector2.Distance(WordToCanvasPos(canvas, corners[0]), WordToCanvasPos(canvas, corners[2])) / 2f;float x = corners[0].x + ((corners[3].x - corners[0].x) / 2f);float y = corners[0].y + ((corners[1].y - corners[0].y) / 2f);Vector3 center = new Vector3(x, y, 0f);Vector2 position = Vector2.zero;RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, center, canvas.GetComponent<Camera>(),out position);center = new Vector4(position.x,position.y,0f,0f);m_Material = GetComponent<Image>().material;m_Material.SetVector("_Center", center);(canvas.transform as RectTransform).GetWorldCorners(corners);for (int i = 0; i < corners.Length; i++){m_Currnet = Mathf.Max(Vector3.Distance(WordToCanvasPos(canvas, corners[i]), center),m_Currnet);}m_Material.SetFloat("_Silder", m_Currnet);}Vector2 WordToCanvasPos(Canvas canvas,Vector3 world){Vector2 position = Vector2.zero;RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, world, canvas.GetComponent<Camera>(),out position);return position;}float yVelocity = 0f;// Update is called once per framevoid Update(){float value = Mathf.SmoothDamp(m_Currnet, m_Diameter, ref yVelocity, 0.3f);if(!Mathf.Approximately(value,m_Currnet)){m_Currnet = value;m_Material.SetFloat("_Silder", m_Currnet);}}private void OnGUI(){if(GUILayout.Button("Test")){Awake();}}
}

这篇关于unity3D 引导(镂空)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194655

相关文章

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

Android 引导图层、引导页

Android 引导图层(参考gith项目) Android 引导图层参考gith项目 简介不多说 先上图 部分代码说明 简介: 最最轻量级的新手引导图层库,支持单页,多个引导,支持设置不同的图形,支持动画等,例如:Activity 、fragment、各种对应View 皆可; 不多说 先上图: OK ;可以根据自己的需求重新定义 显示的效果;都

linux-5.6.6 内核引导

本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:povcfe 原文地址:https://bbs.pediy.com/thread-261718.htm     本文详细讲解linux内核的加载过程,参考linux-insiders,并结合linux-5.6.6代码对原文的部分老旧内容做修改 引导 1.按

Unity3D在2D游戏中获取触屏物体的方法

我们的需求是: 假如屏幕中一个棋盘,每个棋子是button构成的,我们希望手指或者鼠标在哪里,就显示那个位置的button信息。 网上有很多获取触屏物体信息的信息的方法如下面代码所示: Camera cam = Camera.main; // pre-defined...if (touch.phase == TouchPhase.Bagan)){ // 如果触控点状态为按下Ray

win10 gpt分区+uefi引导 卸载双系统ubuntu

1、首先暴力卸载ubuntu 在win10里面磁盘管理中找到对应的linux磁盘分区 删除卷OK 2、重启 出现下面(根据机型不同界面可能不一样 ) 3、exit 退出grub引导 进入uefi引导  选择win10引导项 (当然你要是一直按着进入bios boot的那个按键的话 也不用看第二步了 直接选择windows启动项进去 dell的话是F12) 4、进入

Unity3D Shader详解:只画顶点或只画线框

在Unity3D开发中,Shader是控制渲染过程的关键组件,它允许开发者自定义物体的渲染方式。有时,为了特定的视觉效果,我们可能需要只渲染模型的顶点或者只显示其线框。下面,我们将详细探讨这两种效果的技术实现,并给出相应的代码示例。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 只画顶点 在Unity中直接“只画顶点”的概念可能不是非常直观,因为顶点本身只是模型

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

基于中心引导判别学习的弱监督视频异常检测

WEAKLY SUPERVISED VIDEO ANOMALY DETECTION VIA CENTER-GUIDED DISCRIMINATIVE LEARNING 基于中心引导判别学习的弱监督视频异常检测 abstract 由于异常视频内容和时长的多样性,监控视频中的异常检测是一项具有挑战性的任务。在本文中,我们将视频异常检测看作是一个弱监督下视频片段异常分数的回归问题。因此,我们提出了

Unity3D ARPG(动作角色扮演游戏)设计与实现详解

动作角色扮演游戏(Action Role-Playing Game, ARPG)结合了传统角色扮演游戏(RPG)的深度与动作游戏(Action Game)的即时反应和流畅战斗体验。Unity3D 作为一款强大的跨平台游戏开发引擎,为开发者提供了丰富的工具和资源来创建高质量的 ARPG 游戏。本文将详细介绍如何使用 Unity3D 设计和实现一个基本的 ARPG 游戏,包括技术选型、游戏架构、关键系