How to programmatically scale a canvas element to always be touching another moving canvas element


I need help with making an image scale so that its right end is always touching the left end of another moving element.

So I have a seatbelt composed of two images:

  • Tongue.
  • Belt.


These are all images within a Canvas and they’re anchored to the left.

Basically what I want to happen is:

  1. The tongue moves on the X axis (by touching and dragging).
  2. The seatbelt stretches its scale on the X axis so its right end is always touching the tongue, and its left end is stationary.

I’ve tried to workout the logic for this and I narrowed it down to a few points:

  • Store initial position of target (tongue), and initial scale of belt.
  • Calculate how far target has moved from start position.
  • Set belt’s X scale to be initalScale.x + deltaTargetX multiplied by some factor (I haven’t been able to figure this out yet).

So far, The belt does move in the proper directions, but it’s way off (probably due to a missing variable in my scaling) by either too much or too little.

I haven’t figured out whether I should be using anchoredPositions from the RectTransforms, or just use positions from Transforms. I’ve done something similar in the past but not on a Canvas.

Here is a sample project (Apologies for the weird stuff going on in the script, I’m still lost on what to do).

i think the UGUI system can do this for you without you writing any code for the belt/tongue positioning.

make the “Tongue” object a child of the “Belt” object,
and set the Tongue’s X-anchors to be Min: 1 and Max: 1.

then stretch the size of the Belt object, and the Tongue moves relative to the right-hand edge of the Belt.