zyonneo
zyonneo

Reputation: 1389

How to make a model appear in front of AR Camera after the session starts using ARFoundation?

I was looking to update the ARcamera position.I am doing ImageTracking project.It detects an image and a corresponding prefab is shown in front of the camera.It starts playing an animation.After the animation I want the prefab to come really close towards the camera.When I give the code prefab.position=ARcamera.position; after animation code,I think the prefab goes to the initial position where the ARCamera was when the app had started that is (0,0,0).

How to make the prefab come really close towards the front camera.

  speed = 10f;
  float step = speed * Time.deltaTime;
  Showprefabs.transform.GetChild(0).position = Vector3.MoveTowards(Showprefabs.transform.GetChild(0).position,
                                             new Vector3(Arcam.transform.position.x, Arcam.transform.position.y + 0.2f,
                                             Arcam.transform.position.z + 6.3f), step);

//The values 0.2f and 6.3f I added using the Editor to make the prefab come near the camera(But in world position it is different.)

Upvotes: 1

Views: 2054

Answers (1)

derHugo
derHugo

Reputation: 90679

First of all I hope by "prefab" you mean already Instantiated GameObject. It makes no sense to move a prefab ;)


You tried to calculate the target position but did it with World-Space coordinates.

You probably want to do something like

var targetObject = Showprefabs.transform.GetChild(0);
var currentPosition = targetObject.position;

var targetPosition = Arcam.transform.position 
    // Place it 60cm in front of the camera
    + Arcam.transform.forward * 0.6f
    // additionally move it "up" 20cm perpendicular to the view direction
    + Arcam.transform.up * 0.2f;

targetObject.position = Vector3.MoveTowards(currentPosition, targetPosition, step * Time.deltaTime);

If you want that movement a bit smoother so it moves slower if already close and faster if further away you might be interested in rather using Vector3.Lerp here

public float smoothFactor = 0.5f;

targetObject.position = Vector3.Lerp(currentPosition, targetPosition, smoothFactor);

Where a smoothFactor of 0.5 reads: Every frame set the object to a position in the center of the currentPosition and targetPosition. A value closer to 0 results in slower movement, closer to 1 in faster reaching the targetPosition.

Note that actually this approach will never really fully arrive at the targetPosition but only come very very close but usually this doesn't matter in AR where the Camera constantly moves a bit anyway.

Upvotes: 2

Related Questions