コード例 #1
0
 public void Carry(EntityComponent player)
 {
     joint = gameObject.AddComponent <FixedJoint>();
     joint.connectedBody = player.GetComponent <Rigidbody>();
     joint.massScale     = MASS_SCALE * rb.mass;
     joint.breakForce    = BREAK_FORCE;
     StartCoroutine(PickUpAnimCoroutine(player));
 }
コード例 #2
0
    private IEnumerator PickUpAnimCoroutine(EntityComponent player)
    {
        joint.enableCollision = false;
        // calculate the start anchor...
        joint.autoConfigureConnectedAnchor = true;
        yield return(new WaitForFixedUpdate());

        if (joint == null)
        {
            yield break;
        }
        Vector3 startAnchor = joint.connectedAnchor;

        joint.autoConfigureConnectedAnchor = false;

        Vector3 carryVector = CARRY_VECTOR;

        carryVector += Vector3.down * player.GetComponent <CapsuleCollider>().height / 2;
        Bounds bounds = GetRigidbodyBounds(rb);

        carryVector += Vector3.up * (rb.transform.position.y - bounds.min.y);
        // get closest point when object is moved in front of player
        Vector3 carryPoint = rb.ClosestPointOnBounds(
            rb.transform.position - player.transform.forward * 100f);
        float carryDist = Vector3.Project(carryPoint - rb.transform.position, player.transform.forward).magnitude;

        carryVector += Vector3.forward * carryDist;

        float startTime = Time.fixedTime;

        while (Time.fixedTime - startTime < PICK_UP_TIME)
        {
            joint.connectedAnchor = Vector3.Slerp(startAnchor, carryVector,
                                                  EaseInOutSine((Time.fixedTime - startTime) / PICK_UP_TIME));
            yield return(new WaitForFixedUpdate());

            if (joint == null)
            {
                yield break;
            }
        }
        joint.connectedAnchor = carryVector;
        joint.enableCollision = true;
    }
コード例 #3
0
 private void Start()
 {
     //set the interface value
     assignealbe = assigneableAb.GetComponent <IWorkerAssigneable <int> >();
     UIManager.Instance.AddWorkerAssigner(this);
 }