コード例 #1
0
 void FixedUpdate()
 {
     if (isWaitingToSpawn)
     {
         if (spawningObject == null)
         {
             Respawn(Random.Range(0, PathStarts.Length));
         }
         else
         {
             rgd.position = new Vector3(9999.0f, 9999.0f, 9999.0f);
         }
     }
     else if (IsOnBelt)
     {
         if (spawningObject == this && pf.Current.Previous != null)
         {
             spawningObject = null;
         }
     }
     else if (rgd.velocity.sqrMagnitude < RespawnMaxSpeed * RespawnMaxSpeed &&
              (HumanBehavior.Instance.MyTransform.position - rgd.position).sqrMagnitude > RespawnRadius * RespawnRadius)
     {
         isWaitingToSpawn = true;
         rgd.isKinematic = true;
         lvt.enabled = false;
     }
 }
コード例 #2
0
ファイル: ConveyorBelt.cs プロジェクト: Eelazar/Dog
    public void Push()
    {
        for (int i = 0; i < rbodies.Count; i++)
        {
            ConveyorBeltObject conveyorBeltObject = rbodies[i];

            Vector3 worldVelocity = conveyorBeltObject.rbody.velocity;

            Vector3 worldForceDirection = (transform.rotation * forceDirection) * force;

            Vector3 velocityAlongDirection = Vector3.Project(worldVelocity, worldForceDirection);

            Vector3 nearestPointOnBelt = transform.position + Vector3.Project((conveyorBeltObject.rbody.transform.position - transform.position), transform.rotation * forceDirection);

            conveyorBeltObject.rbody.AddForce((nearestPointOnBelt - conveyorBeltObject.rbody.transform.position) * conveyorBeltObject.force, ForceMode.Force);

            Debug.DrawLine(nearestPointOnBelt, conveyorBeltObject.rbody.transform.position, Color.green);

            if (velocityAlongDirection.sqrMagnitude < force * force)
            {
                conveyorBeltObject.rbody.AddForce(transform.localToWorldMatrix * forceDirection.normalized * force * conveyorBeltObject.force, ForceMode.Force);
            }

            conveyorBeltObject.force = Mathf.Clamp(conveyorBeltObject.force + Time.fixedDeltaTime, 0f, 1f);

            rbodies[i] = conveyorBeltObject;
        }
    }
コード例 #3
0
ファイル: ConveyorBelt.cs プロジェクト: Eelazar/Dog
    private void OnTriggerEnter(Collider other)
    {
        ConveyorBeltObject conveyorBeltObject = new ConveyorBeltObject();

        conveyorBeltObject.rbody = other.attachedRigidbody;
        conveyorBeltObject.force = 0f;

        rbodies.Add(conveyorBeltObject);
    }
コード例 #4
0
ファイル: ConveyorBelt.cs プロジェクト: Eelazar/Dog
 private void OnTriggerExit(Collider other)
 {
     for (int i = 0; i < rbodies.Count; i++)
     {
         ConveyorBeltObject conveyorBeltObject = rbodies[i];
         if (conveyorBeltObject.rbody.Equals(other.attachedRigidbody))
         {
             rbodies.Remove(conveyorBeltObject);
             break;
         }
     }
 }
コード例 #5
0
    void Awake()
    {
        pf = GetComponent<PathFollower>();
        lvt = GetComponent<Levitatable>();

        if (PathStarts == null)
        {
            PathStarts = GameObject.FindObjectsOfType<ConveyorBeltStartNode>().Select(cbsn => cbsn.GetComponent<PathNode>()).ToArray();
        }

        spawningObject = null;

        if (RespawnOnStart)
        {
            isWaitingToSpawn = true;
        }
        else
        {
            isWaitingToSpawn = false;
        }
    }
コード例 #6
0
    private void Respawn(int index)
    {
        isWaitingToSpawn = false;

        rgd.isKinematic = true;
        lvt.enabled = false;
        pf.enabled = true;

        pf.Current = PathStarts[index];
        spawningObject = this;
        rgd.position = pf.Current.MyTransform.position;
    }