如何在Unity中画unity 抛物线运动

如何在Unity中画unity 抛物线运动,第1张

在unity中画抛物线的方法,代码如下:
抛物线公式y=axx+bx+c;a>0,开口向上;
a<0,开口向下。b=0,抛物线对称轴为y轴。c=0,抛物线经过原点。
获取一些抛物线上的点,然后相邻的两点和原点画三角面,这样可以用三角面拼成了“抛物面”了,
而且还可以通过修改a的值来改变小山峰的陡峭程度。
直接晒代码 Parabolajs :
private var a:int;//a>0,开口向上;a<0,开口向下。
private var b:int;//b=0,抛物线对称轴为y轴
private var c:int;//c=0,抛物线经过原点
private var size:int;
function Start () {
a=-1;
b=0;
c=0;
size=22;
gameObjectAddComponent("MeshFilter");
gameObjectAddComponent("MeshRenderer");
var mesh : Mesh = GetComponent(MeshFilter)mesh;
meshClear();
var v:Vector3[]=new Vector3[size];
var v2:Vector2[]=new Vector2[size];
var index:int []=new int[(size-2)3];
for(var i:int=0;i
if(i==0)
{
v[i]=Vector3(0,-1,0);
}
else
{
var x:float=(i-size/2)01;
v[i]x=x;
v[i]y=axx+bx+c;
v[i]z=0;
}
if(i>1){
index[3i-6]=0;
index[3i-5]=i-1;
index[3i-4]=i;
}
print("v["+i+"]="+v[i]);
}
meshvertices = v;
meshuv = v2;
meshtriangles = index;
for(var j:int=0;j
print(j+"=="+index[j]);
}
}

在确定不是任何脚本原因或者是在观察范围外的情况下,还看不到画出来的线,那就只有一种可能Scene面板里Gizmos被取消了 没有打开场景内的显示单击打开就好了 可以看到了吧 简单吧

可以自己写一个Shader
Shader "Custom/WireFrame"
{
Properties
{
_LineColor ("Line Color", Color) = (1,1,1,1)
_GridColor ("Grid Color", Color) = (1,1,1,0)
_LineWidth ("Line Width", float) = 02
}
SubShader
{
Pass
{
//Tags { "RenderType" = "Transparent" }
// Blend SrcAlpha OneMinusSrcAlpha//这句可以注释掉,能够避免线框太粗出现的模糊效果。
//AlphaTest Greater 05
//Cull Off//这句是后加的,取消遮挡消隐,体现出透明

CGPROGRAM
#pragma vertex vert
#pragma fragment frag

uniform float4 _LineColor;
uniform float4 _GridColor;
uniform float _LineWidth;

// vertex input: position, uv1, uv2
struct appdata
{
float4 vertex : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color : COLOR;
};

struct v2f
{
float4 pos : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color : COLOR;
};

v2f vert (appdata v)
{
v2f o;
opos = mul( UNITY_MATRIX_MVP, vvertex);
otexcoord1 = vtexcoord1;
ocolor = vcolor;
return o;
}

fixed4 frag(v2f i) : COLOR
{
fixed4 answer;

float lx = step(_LineWidth, itexcoord1x);
float ly = step(_LineWidth, itexcoord1y);
float hx = step(itexcoord1x, 10 - _LineWidth);
float hy = step(itexcoord1y, 10 - _LineWidth);

answer = lerp(_LineColor, _GridColor, lxlyhxhy);

return answer;
}
ENDCG
}
}
Fallback "Vertex Colored", 1
}

计算运动轨迹的点,然后用lineRender把这些点连接起来就成抛物线了

LineRenderer line;
int segmentCount = 15;
lineSetVertexCount(segmentCount);
float gravity=98;
Vector2[] segments = new Vector2[segmentCount];
segments[0] = Vector2zero;
lineSetPosition(0, segments[0]);    
for (int i = 1; i < segmentCount; i++)
{
float time2 = i  TimefixedDeltaTime  5;
segments[i] = segments[0] + segVelocity  time2 + 05f gravity  MathfPow(time2, 2);
lineSetPosition(i, segments[i]);       
}

如果你使用debugdrawline()划线的话,那么这个线只是用来调试的,所以游戏中是看不到的。(但是官方文档说如果在游戏中启用了gizmo绘制的话,那么也同样在游戏中绘制,不过还没有见人这样做的)
游戏中绘制直线的话,一般使用LineRenderer这个组件。

在Unity3D中,Curves(曲线)是指一种可以用来控制属性值随时间变化的动画控制器。Curves可以控制对象的位置、旋转、缩放、颜色等属性的变化。Curves通常用于创建动画,可以通过可视化编辑器来创建和编辑。Curves的编辑器中,横轴代表时间,纵轴代表属性值,用户可以通过添加、删除、修改曲线上的关键帧来控制属性值的变化。
如果你是一个Unity3D萌新,建议先学习Unity3D的基础知识,包括场景搭建、对象控制、脚本编写等等。然后再学习Curves的使用,掌握Curves的使用可以让你更好的制作动画,并且提高你在Unity3D中的制作效率。可以参考官方文档或者一些教程视频来学习Curves的使用。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13412472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存