コード例 #1
0
    protected override void Respond(DRigidbody drb)
    {
        double sqrMagnitude = Vector3d.SqrMagnitude(position - drb.position);

        Vector3d dir   = (position - drb.position).normalized;
        Vector3d force = dir * multiplier / sqrMagnitude;

        drb.AddForce(force);
    }
コード例 #2
0
    protected override void Respond(DRigidbody drb)
    {
        if (drb.position.y > 0)
        {
            return;
        }

        drb.position   = new Vector3d(drb.position.x, 0, drb.position.z);
        drb.velocity.y = 0;
    }
コード例 #3
0
    protected override void Respond(DRigidbody drb)
    {
        if (Vector3d.SqrMagnitude(position - drb.position) < radius * radius)
        {
            Vector3d contactPosition = Vector3d.ClampMagnitude(drb.position - position, radius) + position;

            drb.position = contactPosition;

            drb.AddForce(new Vector3d(0, 9.81, 0));


            Vector3d diff   = drb.position - position;
            Vector3d normal = diff.normalized;

            Debug.DrawRay((Vector3)contactPosition, (Vector3)normal);

            if (Vector3d.Dot(normal, drb.velocity) < 0)
            {
                drb.velocity = Vector3d.ProjectOnPlane(drb.velocity, normal);
            }
        }
    }
コード例 #4
0
 protected override void Respond(DRigidbody drb)
 {
     drb.AddForce(acceleration);
 }
コード例 #5
0
 protected abstract void Respond(DRigidbody drb);