- Home /
QUick question regarding Billboard Script.
I'm using the following script and it works perfect, the only problem is that when i get a few feet away from the sprite this is applied to it seems to be pushed over. i've been trying to solve this issue and seem to be missing how this would be done. If you have an idea of how this would be accomplished that would be a huge help. Thank you,
DaveP
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Billboard : MonoBehaviour { void Update() { transform.LookAt(Camera.main.transform.position, Vector3.up); } }
Answer by ariese · Oct 02, 2017 at 01:25 PM
I think what you want is the billboard object to only rotate about the Y axis. I've been using this script on the Hololens. You specify either Free or Y axis rotation in the inspector. You may need to modify it for your own purposes. I hope this helps you.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
using UnityEngine;
namespace HoloToolkit.Unity
{
public enum PivotAxis
{
// Rotate about all axes.
Free,
// Rotate about an individual axis.
Y
}
/// <summary>
/// The Billboard class implements the behaviors needed to keep a GameObject oriented towards the user.
/// </summary>
public class Billboard : MonoBehaviour
{
/// <summary>
/// The axis about which the object will rotate.
/// </summary>
[Tooltip("Specifies the axis about which the object will rotate.")]
public PivotAxis PivotAxis = PivotAxis.Free;
[Tooltip("Specifies the target we will orient to. If no Target is specified the main camera will be used.")]
public Transform TargetTransform;
private void OnEnable()
{
if (TargetTransform == null)
{
TargetTransform = Camera.main.transform;
}
Update();
}
/// <summary>
/// Keeps the object facing the camera.
/// </summary>
private void Update()
{
if (TargetTransform == null)
{
return;
}
// Get a Vector that points from the target to the main camera.
Vector3 directionToTarget = TargetTransform.position - transform.position;
// Adjust for the pivot axis.
switch (PivotAxis)
{
case PivotAxis.Y:
directionToTarget.y = 0.0f;
break;
case PivotAxis.Free:
default:
// No changes needed.
break;
}
// If we are right next to the camera the rotation is undefined.
if (directionToTarget.sqrMagnitude < 0.001f)
{
return;
}
// Calculate and apply the rotation required to reorient the object
transform.rotation = Quaternion.LookRotation(-directionToTarget);
}
}
}
Your answer
Follow this Question
Related Questions
Manually changing between sprites in a spritesheet 0 Answers
Can we make a script an Addressable in Unity ? 2 Answers
AssetDatabase.LoadAssetAtPath is null? Any way to load Sprite asset? 1 Answer
Compression of sprites not working 0 Answers
Assets do not show up in "Select Sprite" window on maxOS Big Sur 0 Answers