Посчитал новый центр масс, нарисовал лучик и он в нужном месте.
Назначил центр масс, нарисовал лучик, но тот почему-то не там где я поставил центр масс.
Синтаксис:
Используется javascript
if (transform.rigidbody==null)
{
gameObject.AddComponent (Rigidbody);
rigidbody.mass=1000;
rigidbody.isKinematic =true;
}
private var tr:Transform;
tr=transform;
private var marc : Transform;
marc=tr;
var connected_obj : Transform ;
private var destr : boolean ;
private var leafs = new Array();
function explode_d()
{
destr=true;
}
function leaf(p:Vector3)
{
leafs.Add(p);
}
function explode(m:Transform)
{
tr.parent=null;
if (connected_obj!=null)
{
if (destr!=false)
{
marc=connected_obj;
}
else
{
marc=m;
}
connected_obj.gameObject.SendMessage ("explode",marc,SendMessageOptions.DontRequireReceiver);
}
else
{
marc=m;
m.gameObject.SendMessage ("leaf",tr.position,SendMessageOptions.DontRequireReceiver);
}
if (tr!=marc)
{
tr.parent=marc;
marc=tr;
}
else
{
if (rigidbody!=null)
{
rigidbody.isKinematic =false;
leaf(tr.position);
var c_o_m : Vector3;
for (var cp:Vector3 in leafs)
{
c_o_m=c_o_m+cp;
}
c_o_m = c_o_m/leafs.length;
c_o_m = tr.InverseTransformDirection (c_o_m);
Debug.DrawRay(tr.TransformDirection (c_o_m) ,Vector3.up*100, Color.white);
rigidbody.centerOfMass =c_o_m;
Debug.DrawRay(rigidbody.worldCenterOfMass ,Vector3.up*100, Color.red);
}
}
}
{
gameObject.AddComponent (Rigidbody);
rigidbody.mass=1000;
rigidbody.isKinematic =true;
}
private var tr:Transform;
tr=transform;
private var marc : Transform;
marc=tr;
var connected_obj : Transform ;
private var destr : boolean ;
private var leafs = new Array();
function explode_d()
{
destr=true;
}
function leaf(p:Vector3)
{
leafs.Add(p);
}
function explode(m:Transform)
{
tr.parent=null;
if (connected_obj!=null)
{
if (destr!=false)
{
marc=connected_obj;
}
else
{
marc=m;
}
connected_obj.gameObject.SendMessage ("explode",marc,SendMessageOptions.DontRequireReceiver);
}
else
{
marc=m;
m.gameObject.SendMessage ("leaf",tr.position,SendMessageOptions.DontRequireReceiver);
}
if (tr!=marc)
{
tr.parent=marc;
marc=tr;
}
else
{
if (rigidbody!=null)
{
rigidbody.isKinematic =false;
leaf(tr.position);
var c_o_m : Vector3;
for (var cp:Vector3 in leafs)
{
c_o_m=c_o_m+cp;
}
c_o_m = c_o_m/leafs.length;
c_o_m = tr.InverseTransformDirection (c_o_m);
Debug.DrawRay(tr.TransformDirection (c_o_m) ,Vector3.up*100, Color.white);
rigidbody.centerOfMass =c_o_m;
Debug.DrawRay(rigidbody.worldCenterOfMass ,Vector3.up*100, Color.red);
}
}
}
Демка
HTML код для вашего блога :
Сцена
http://dc268.4shared.com/download/T9GP-geO/center.unitypackage
Подскажите где ошибка?
p.s.
Если добавить rigidbody, а не выключать isKinematic центр масс рассчитывается автоматически,
но для длинных цепочек FPS падает раза в 4 после каждого добавления rigidbody (видимо
как-раз расчет центра масс)