Friday, October 19, 2018

c# - Rotate object to always face camera


I'm trying to make a TextMesh appear when ever an enemy prefab is hit.


I currently have this functionality working. However, the text doesn't face the direction the players camera is looking.


At the moment my OnCollisionEnter method contains the following line of code:


GameObject _go = (GameObject)Instantiate(_hitPrefab, collision.gameObject.transform.position, Camera.mainCamera.transform.rotation);

This line happily creates my TextMesh whenever my enemy is hit. I know my issue has something to do with my rotation quaterion, but I have no idea what pass in so it faces my camera. As you can see, I tried setting it Quaterion.Idenitiy thinking it'll show the same way as the enemy it's associated to, but that doesn't work either.


Each time the textmesh appears, its back to front for the player and at a slight angle.



Could someone please help me in getting it so the score always faces the players camera no matter what way he is facing?



Answer



You are simply copying the main camera's rotation in your code snippet, try this method:


GameObject _go = (GameObject)Instantiate(_hitPrefab, 
collision.gameObject.transform.position, Quaternion.identity);
_go.transform.LookAt(Camera.main.transform);

http://docs.unity3d.com/Documentation/ScriptReference/Transform.LookAt.html


You should also have a look into Quaternion.LookRotation.


http://docs.unity3d.com/Documentation/ScriptReference/Quaternion.LookRotation.html



Edit:


This is a very useful community script for camera facing, the results may be slightly better: http://wiki.unity3d.com/index.php?title=CameraFacingBillboard


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...