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); } }