상세 분해 Unity 는 Particle System 입자 시스템 시 뮬 레이 션 약물 을 사용 하여 혈관 에서 흐른다(입자 충돌)
6870 단어 UnityParticleSystem입자
길 을 잃 지 않 고 지속 적 인 수출
Unity
건어물 글 에 관심 을 가 집 니 다.안녕하세요.
전에 나 는
Unity
유체 시 뮬 레이 션 글 을 한 편 썼 다.Unity 유체 시 뮬 레이 션,입자 시스템 지원,유체 충돌 상호작용 지원(Obi Fluid 플러그 인 사용 강좌그리고 어떤 친구 가 나 에 게 약 제 를 만들어 혈관 에 넣 는 효 과 를 물 었 다.
글 쎄 요.
ObiFluid
로 할 수 있 지만 제 가 오늘 시도 해 볼 것 은 다른 방식 으로 하 는 것 입 니 다.Unity
의 입자 시스템 을 직접 사용 해서 하 는 것 입 니 다.최종 효과
최종 효 과 는 다음 과 같다.효 과 는 보통 이지 만 제 도 는 상대 적 으로 간단 하 다.
본 논문
Demo
공 사 는 이미CodeChina
에 올 랐 고 관심 이 있 는 학생 들 은 스스로 다운로드 하여 공부 할 수 있다.주소:https://codechina.csdn.net/linxinfa/UnityParticleFluidDemo
주:내 가 사용 하 는 유 니 티 버 전:
Unity 2020.1.14f1c1 (64-bit)
.3.제작 과정
1.혈관 모형 도입
혈관 모형 을 공사 에 도입 하 다.
2.혈관 셰 이 더
우 리 는 혈관 을 통 해 약물 이 흐 르 는 것 을 볼 필요 가 있 기 때문에 혈관 은 반투명 표시 가 필요 하 다.우 리 는 이곳 에
shader
를 만들어 반투명 효 과 를 실현 해 야 한다.shader
코드 는 다음 과 같다.
Shader "linxinfa/CustomTransShader" {
Properties {
_Color ("Main Tint", Color) = (1,1,1,1)
_MainTex ("Main Tex", 2D) = "white" {}
_AlphaScale("Alpha Scale",Range(0,1)) = 1
}
SubShader {
Tags{"Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
Pass
{
Tags{"LightMode" = "ForwardBase"}
Cull Front
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _AlphaScale;
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct v2f
{
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD0;
float3 worldPos : TEXCOORD1;
float2 uv : TEXCOORD2;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
fixed4 frag(v2f i) : SV_TARGET0
{
fixed3 worldNormal = normalize(i.worldNormal);
fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
fixed4 texcolor = tex2D(_MainTex,i.uv);
fixed3 albedo = texcolor.rgb * _Color.rgb;
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
fixed3 diffues = _LightColor0.rgb * albedo * max(0,dot(worldNormal,worldLightDir));
return fixed4(ambient + diffues,texcolor.a * _AlphaScale);
}
ENDCG
}
Pass
{
Tags{"LightMode" = "ForwardBase"}
Cull Back
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _AlphaScale;
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct v2f
{
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD0;
float3 worldPos : TEXCOORD1;
float2 uv : TEXCOORD2;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
fixed4 frag(v2f i) : SV_TARGET0
{
fixed3 worldNormal = normalize(i.worldNormal);
fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
fixed4 texcolor = tex2D(_MainTex,i.uv);
fixed3 albedo = texcolor.rgb * _Color.rgb;
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
fixed3 diffues = _LightColor0.rgb * albedo * max(0,dot(worldNormal,worldLightDir));
return fixed4(ambient + diffues,texcolor.a * _AlphaScale);
}
ENDCG
}
}
FallBack "Transparent/VertexLit"
}
3.혈관 재질 공재질 공 을 만 들 고 방금
CustomTransShader.shader
을 사용 합 니 다.그리고 재질 구 를 혈관 모형 에 미리 설치 하면 반투명 한 혈관 이 만들어 진다.
4.충돌 체 추가
약물 은 혈관 에서 흐 르 기 때문에 충돌 이 발생 해 야 하기 때문에 혈관 은 충돌 체 를 첨가 해 야 한다.
MeshCollider
.5.물약 입자
물약 입 자 는 사실 보통 입자 다.
가장 관건 적 인 것 은 입자 의
Collision
속성 을 켜 면 입자 가 혈관 벽 과 부 딪 힐 수 있다 는 것 이다.그 중 일부 인자:
Dampen:저항력
바 운 스:탄력
Lifetime Loss:손실률
최소 사망 속도:최소 사망 속도
최대 킬 속도:최대 사망 속도
Radius Scale:반경 크기 를 조정 하면 입자 가 충돌 하지 않 고 충돌 할 수 있 습 니 다.
4.테스트 효과
최종 운행
Unity
,테스트 효 과 는 다음 과 같 습 니 다.종결 어
이상 입 니 다.
유 니 티 가 파 티 클 시스템 입자 시스템 을 사용 하여 혈관 에서 흐 르 는 모 의 약물(입자 충돌)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.유 니 티 파 티 클 시스템 입자 시스템 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.