这里我是用四边形画的抛物线,你也可以换成line来画:
#region 计算抛物线路径
Vector3 position = handle_gameobj.transform.position;
Vector3 forward = handle_gameobj.transform.rotation * Vector3.forward * length;
Vector3 newPos = position;
Vector3 lastPos = newPos;
m_List.Add(newPos);
int a = 0;
float dis = 0;
while (dis < 100f)="" {="" a++;="" newpos="lastPos" +="" forward="" +="" vector3.up="" *="" a="" *="" -gravity="" *="" 0.1f;="" dis="" +="Vector3.Distance(lastPos," newpos);="" m_list.add(newpos);="" lastpos="newPos;" }="" #endregion="" #region="" 描绘路径="" bool="" issomthing_collider="false;" gl.pushmatrix();="" material.setpass(0);="" gl.begin(gl.quads);="" gl.color(color.cyan);="" for="" (int="" i="0;" i="">< m_list.count;="" i++)="" {="" #region="" 描绘可视抛物线="" if="" (i="" +="" 1="">< m_list.count="" &&="" !issomthing_collider)="" {="" vector3="" pos1="m_List[i]" +="" handle_gameobj.transform.right="" *="" _weight;="" vector3="" pos2="m_List[i" +="" 1]="" +="" handle_gameobj.transform.right="" *="" _weight;="" vector3="" pos3="m_List[i" +="" 1]="" -="" handle_gameobj.transform.right="" *="" _weight;="" vector3="" pos4="m_List[i]" -="" handle_gameobj.transform.right="" *="" _weight;="" 1="" gl.vertex(pos1);="" 2="" gl.vertex(pos2);="" 3="" gl.vertex(pos3);="" 4="" gl.vertex(pos4);="" }="" #endregion="" #region="" 射线处理="" if="" (i="" +="" 1="">< m_list.count)="" {="" if="" ((m_list[i]="" -="" contact_vector3).magnitude="">< 0.1f)="" {="" issomthing_collider="true;" break;="" }="" ray="" rayer="new" ray(m_list[i]="" -="" handle_gameobj.transform.right="" *="" 0.001f,="" (m_list[i="" +="" 1]="" -="" m_list[i]).normalized="" *="" 100f);="" 当射线与物体碰撞时,获取rayhit(rayhit.point射线与物体的接触点,rayhit.distance向量方向,rayhit.collider.gameobject获取物体的所有信息)="" raycasthit="" rayhit;="" if="" (physics.raycast(rayer,="" out="" rayhit,="" 100f,="" ~(1="">< 5)))="" {="" if="" (rayhit.collider.gameobject.layer="=" layer_number)="" {="" contact_vector3="rayhit.point;" }="" }="" }="" #endregion="" }="" gl.end();="" gl.popmatrix();="" m_list.clear();="">
在unity中画抛物线的方法,代码如下: 抛物线公式y=a*x*x+b*x+c;a>0,开口向上; a<0,开口向下。b=0,抛物线对称轴为y轴。c=0,抛物线经过原点。 获取一些抛物线上的点,然后相邻的两点和原点画三角面,这样可以用三角面拼成了“抛物面”了, 而且还可以通过修改a的值来改变小山峰的陡峭程度。 直接晒代码 parabola.js : 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; gameobject.addcomponent("meshfilter"); gameobject.addcomponent("meshrenderer"); var mesh : mesh = getcomponent(meshfilter).mesh; mesh.clear(); 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)*0.1; v[i].x=x; v[i].y=a*x*x+b*x+c; v[i].z=0; } if(i>1){ index[3*i-6]=0; index[3*i-5]=i-1; index[3*i-4]=i; } print("v["+i+"]="+v[i]); } mesh.vertices = v; mesh.uv = v2; mesh.triangles = index; for(var j:int=0;j print(j+"=="+index[j]); } }
Photoshop|
Dreamweaver|
SVG|
WebGL|
Visual Studio|
PowerDesigner|
Eclipse|
Git|
Apache Ant|
Atom|
Composer|
CodeSmith|
Flex|
Gradle|
Maven|
Sublime Text3|
SVN|
Tableau|
Vim|
Chrome开发者工具|
OpenGL|
Unity|
Direct3D|
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....