CameraFacingBillboard

原地址:http://www.cnblogs.com/88999660/

描述

这个脚本使得它被连接到配合本身相机的对象。这对于要经常面对镜头,并以同样的方式了,因为它是有用的广告牌。

用法

将这个脚本上要面对镜头一个游戏对象。然后,选择的对象,请使用检查器来选择要面对的对象的相机。

你可能想Vector3.back改变Vector3.front,这取决于你的对象的初始方向。

技术讨论

请注意,该脚本不只是在相机指向的对象。相反,它使得在相同的方向摄像机的前进轴(即,该方向上的摄像机观察中)的对象点。这似乎是直觉错了,但实际上它是正确的实时计算机图形的单点透视的世界。

C# - CameraFacingBillboard.cs

using UnityEngine;
using System.Collections;
 
public class CameraFacingBillboard : MonoBehaviour
{
    public Camera m_Camera;
 
    void Update()
    {
        transform.LookAt(transform.position + m_Camera.transform.rotation * Vector3.back,
            m_Camera.transform.rotation * Vector3.up);
    }
}

MODS

此模块将另外:
-寻找默认的摄像机在场景中
建立一个空的“容器”物体做为广告牌的父母,并会旋转此对象来代替。这允许用户在一个预定的旋转分配给该广告牌对象。
-需要初始化。(刚才设置“autoInit”为“true”)
外挂作者:juanelo

/ / cameraFacingBillboard.cs V02 
/ /由尼尔·卡特(NCarter)
/ /由胡安·卡斯塔涅达修改(juanelo)
/ / 
/ /在两者之间GRP对象加入到上进行旋转
/ /添加自动找到主摄像头
/ /添加取消初始化状态,其中的脚本将做什么

using UnityEngine;
using System.Collections;
 
 
public class CameraFacingBillboard : MonoBehaviour
{
 
    public Camera m_Camera;
    public bool amActive =false;
    public bool autoInit =false;
    GameObject myContainer;    
 
    void Awake(){
        if (autoInit == true){
            m_Camera = Camera.main;
            amActive = true;
        }
 
        myContainer = new GameObject();
        myContainer.name = "GRP_"+transform.gameObject.name;
        myContainer.transform.position = transform.position;
        transform.parent = myContainer.transform;
    }
 
 
    void Update(){
        if(amActive==true){
            myContainer.transform.LookAt(myContainer.transform.position + m_Camera.transform.rotation * Vector3.back, m_Camera.transform.rotation * Vector3.up);
        }
    }
}

此模块将:
-寻找场景中的默认的摄像头
-允许默认轴被指定
外挂作者:海登·斯科特男爵(坞)

/ / CameraFacing.cs 
/ /原来由尼尔·卡特(NCarter)
/ /由海登·斯科特男爵(码头)的改进型- http://starfruitgames.com 
/ /允许指定的方向轴

using UnityEngine;
using System.Collections;
 
public class CameraFacing : MonoBehaviour
{
    Camera referenceCamera;
 
    public enum Axis {up, down, left, right, forward, back};
    public bool reverseFace = false; 
    public Axis axis = Axis.up; 
 
    // return a direction based upon chosen axis
    public Vector3 GetAxis (Axis refAxis)
    {
        switch (refAxis)
        {
            case Axis.down:
                return Vector3.down; 
            case Axis.forward:
                return Vector3.forward; 
            case Axis.back:
                return Vector3.back; 
            case Axis.left:
                return Vector3.left; 
            case Axis.right:
                return Vector3.right; 
        }
 
        // default is Vector3.up
        return Vector3.up;         
    }
 
    void  Awake ()
    {
        // if no camera referenced, grab the main camera
        if (!referenceCamera)
            referenceCamera = Camera.main; 
    }
 
    void  Update ()
    {
        // rotates the object relative to the camera
        Vector3 targetPos = transform.position + referenceCamera.transform.rotation * (reverseFace ? Vector3.forward : Vector3.back) ;
        Vector3 targetOrientation = referenceCamera.transform.rotation * GetAxis(axis);
        transform.LookAt (targetPos, targetOrientation);
    }
}
原文地址:https://www.cnblogs.com/123ing/p/3703842.html