private void UpdatePosition() { target_pos = transform.position; float target_angle = 0f; target_rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, target_angle); if (bearer) { PlatformerCharacter player = bearer.GetComponent <PlatformerCharacter>(); Vector3 motion = player.GetMove(); if (bearer.GetComponent <PlatformerCharacter>()) { if (motion.magnitude > 0.1f) { last_motion = motion; } } //Update position of the item flipX = player.GetSide(); GameObject hand = bearer.hold_hand; target_pos = hand.transform.position + hand.transform.up * carry_offset.y + hand.transform.right * carry_offset.x * flipX; Vector3 rot_vector_forw = Quaternion.Euler(0f, 0f, carry_angle_deg * flipX) * hand.transform.forward; Vector3 rot_vector_up = Quaternion.Euler(0f, 0f, carry_angle_deg * flipX) * hand.transform.up; target_rotation = Quaternion.LookRotation(rot_vector_forw, rot_vector_up); } //Move the object transform.position = target_pos; transform.rotation = target_rotation; //Flip transform.localScale = bearer || throwing ? start_size * carry_size : start_size; transform.localScale = new Vector3(Mathf.Abs(transform.localScale.x) * flipX, transform.localScale.y, transform.localScale.z); }
public void Take(PlatformerCharacter bearer) { this.bearer = bearer; last_bearer = bearer; collide.isTrigger = true; sprite_render.sortingLayerID = bearer.GetComponent <SpriteRenderer>().sortingLayerID; transform.localScale = start_size * carry_size; if (OnTake != null) { OnTake.Invoke(bearer.gameObject); } UpdateCarryItem(); }