Unity角色血条等信息制作
2017-03-20 12:37
459 查看
第一种方法可以使用NGUI控件,但是要注意近大远小
using UnityEngine;
using System.Collections;
public class DriverInfoNGUI : MonoBehaviour {
private Transform mFollowingObject = null;
public float mOffsetY = 2f;
private Camera m3DCamera = null;
private Camera m2DCamera = null;
private Transform mSceneCameraTransform;
private Transform mUICameraTransform;
private Transform mTransform;
private float mCameraNear = 5;
private float mCameraFar = 80;
private float mNFD;
private float mFactor = 0.9f;
private bool mInvisible = true;
private bool mDestroyed = false;
public void SetVisible()
{
mInvisible = true;
}
public void SetOffsetY(float offset)
{
mOffsetY = offset;
}
public float GetOffsetY()
{
return mOffsetY;
}
void OnDestroy()
{
mDestroyed = true;
}
public void SetInVisible()
{
if (mDestroyed)
return;
mInvisible = false;
SetLabelScale(0);
}
public void SetFollowingObject(Transform trs)
{
mFollowingObject = trs;
// CheckCarInCamera check = trs.FindChild("Body").gameObject.AddComponent<CheckCarInCamera>();
// check.driverName = this;
}
private void SetLabelScale(float scale)
{
mTransform.localScale = new Vector3(scale, scale, scale);
}
void Start()
{
mTransform = transform;
m3DCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
mSceneCameraTransform = m3DCamera.transform;
m2DCamera = GameObject.Find("UI").transform.FindChild("Camera").GetComponent<Camera>();
mUICameraTransform = m2DCamera.transform;
mNFD = mCameraFar - mCameraNear;
}
void Update()
{
Vector3 vPos = TransPos(mFollowingObject.position + new Vector3(0, mOffsetY, 0));
mTransform.position = new Vector3(vPos.x, vPos.y, 0);
mTransform.rotation = mUICameraTransform.rotation;
float camD = (mFollowingObject.position - mSceneCameraTransform.position).magnitude;
if (camD <= mCameraNear)
{
camD = mCameraNear;
}
float scale = Mathf.Clamp((mCameraFar - camD) / mNFD, 0f, 1) * mFactor;
mTransform.localScale = new Vector3(scale, scale, scale);
}
//Transform WorldPos in 3DCamera to new WorldPos in 2DCamera. They share the same ScreenPos
Vector3 TransPos(Vector3 worldpos)
{
if (m3DCamera == null || m2DCamera == null)
{
return Vector3.zero;
}
Vector3 screenPos = m3DCamera.WorldToScreenPoint(worldpos);
Vector3 newWorldPos = m2DCamera.ScreenToWorldPoint(screenPos);
return newWorldPos;
}
}
第二种方法是在场景中创建UIPanel,然后将展示控件挂载在控件下面,此时控件将由场景中camera负责渲染
using UnityEngine;
using System.Collections;
public class DriverInfoDisplay : MonoBehaviour {
private Transform mFollowingObject = null;
public float mOffsetY = 2f;
private Camera m3DCamera = null;
private Camera m2DCamera = null;
private Transform mSceneCameraTransform;
private Transform mUICameraTransform;
private Transform mTransform;
private float mCameraNear = 5;
private float mCameraFar = 80;
private float mNFD;
private float mFactor = 0.9f;
private bool mInvisible = true;
private bool mDestroyed = false;
public void SetVisible()
{
mInvisible = true;
}
public void SetOffsetY(float offset)
{
mOffsetY = offset;
}
public float GetOffsetY()
{
return mOffsetY;
}
void OnDestroy()
{
mDestroyed = true;
}
public void SetInVisible()
{
if (mDestroyed)
return;
mInvisible = false;
SetLabelScale(0);
}
public void SetFollowingObject(Transform trs)
{
mFollowingObject = trs;
// CheckCarInCamera check = trs.FindChild("Body").gameObject.AddComponent<CheckCarInCamera>();
// check.driverName = this;
}
private void SetLabelScale(float scale)
{
mTransform.localScale = new Vector3(scale, scale, scale);
}
void Start()
{
mTransform = transform;
m3DCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
mSceneCameraTransform = m3DCamera.transform;
m2DCamera = GameObject.Find("UI").transform.FindChild("Camera").GetComponent<Camera>();
mUICameraTransform = m2DCamera.transform;
mNFD = mCameraFar - mCameraNear;
}
void Update()
{
//Vector3 vPos = TransPos(m_goFollowing.position + new Vector3(0, m_fOffset, 0));
//mTransform.position = new Vector3(vPos.x, vPos.y, 0);
//mTransform.rotation = mUICameraTransform.rotation;
//float camD = (m_goFollowing.position - mSceneCameraTransform.position).magnitude;
//if (camD <= mCameraNear)
//{
// camD = mCameraNear;
//}
//float scale = Mathf.Clamp((mCameraFar - camD) / mNFD, 0f, 1) * mFactor;
//mTransform.localScale = new Vector3(scale, scale,scale);
mTransform.position = mFollowingObject.position;
mTransform.position += new Vector3(0,mOffsetY,0);
Vector3 vecUp = mSceneCameraTransform.rotation * Vector3.up;
mTransform.LookAt(mTransform.position + mSceneCameraTransform.rotation * Vector3.back, vecUp);
mTransform.Rotate(Vector3.up * 180);
}
//Transform WorldPos in 3DCamera to new WorldPos in 2DCamera. They share the same ScreenPos
Vector3 TransPos(Vector3 worldpos)
{
if (m3DCamera == null || m2DCamera == null)
{
return Vector3.zero;
}
Vector3 screenPos = m3DCamera.WorldToScreenPoint(worldpos);
Vector3 newWorldPos = m2DCamera.ScreenToWorldPoint(screenPos);
return newWorldPos;
}
}
using UnityEngine;
using System.Collections;
public class DriverInfoNGUI : MonoBehaviour {
private Transform mFollowingObject = null;
public float mOffsetY = 2f;
private Camera m3DCamera = null;
private Camera m2DCamera = null;
private Transform mSceneCameraTransform;
private Transform mUICameraTransform;
private Transform mTransform;
private float mCameraNear = 5;
private float mCameraFar = 80;
private float mNFD;
private float mFactor = 0.9f;
private bool mInvisible = true;
private bool mDestroyed = false;
public void SetVisible()
{
mInvisible = true;
}
public void SetOffsetY(float offset)
{
mOffsetY = offset;
}
public float GetOffsetY()
{
return mOffsetY;
}
void OnDestroy()
{
mDestroyed = true;
}
public void SetInVisible()
{
if (mDestroyed)
return;
mInvisible = false;
SetLabelScale(0);
}
public void SetFollowingObject(Transform trs)
{
mFollowingObject = trs;
// CheckCarInCamera check = trs.FindChild("Body").gameObject.AddComponent<CheckCarInCamera>();
// check.driverName = this;
}
private void SetLabelScale(float scale)
{
mTransform.localScale = new Vector3(scale, scale, scale);
}
void Start()
{
mTransform = transform;
m3DCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
mSceneCameraTransform = m3DCamera.transform;
m2DCamera = GameObject.Find("UI").transform.FindChild("Camera").GetComponent<Camera>();
mUICameraTransform = m2DCamera.transform;
mNFD = mCameraFar - mCameraNear;
}
void Update()
{
Vector3 vPos = TransPos(mFollowingObject.position + new Vector3(0, mOffsetY, 0));
mTransform.position = new Vector3(vPos.x, vPos.y, 0);
mTransform.rotation = mUICameraTransform.rotation;
float camD = (mFollowingObject.position - mSceneCameraTransform.position).magnitude;
if (camD <= mCameraNear)
{
camD = mCameraNear;
}
float scale = Mathf.Clamp((mCameraFar - camD) / mNFD, 0f, 1) * mFactor;
mTransform.localScale = new Vector3(scale, scale, scale);
}
//Transform WorldPos in 3DCamera to new WorldPos in 2DCamera. They share the same ScreenPos
Vector3 TransPos(Vector3 worldpos)
{
if (m3DCamera == null || m2DCamera == null)
{
return Vector3.zero;
}
Vector3 screenPos = m3DCamera.WorldToScreenPoint(worldpos);
Vector3 newWorldPos = m2DCamera.ScreenToWorldPoint(screenPos);
return newWorldPos;
}
}
第二种方法是在场景中创建UIPanel,然后将展示控件挂载在控件下面,此时控件将由场景中camera负责渲染
using UnityEngine;
using System.Collections;
public class DriverInfoDisplay : MonoBehaviour {
private Transform mFollowingObject = null;
public float mOffsetY = 2f;
private Camera m3DCamera = null;
private Camera m2DCamera = null;
private Transform mSceneCameraTransform;
private Transform mUICameraTransform;
private Transform mTransform;
private float mCameraNear = 5;
private float mCameraFar = 80;
private float mNFD;
private float mFactor = 0.9f;
private bool mInvisible = true;
private bool mDestroyed = false;
public void SetVisible()
{
mInvisible = true;
}
public void SetOffsetY(float offset)
{
mOffsetY = offset;
}
public float GetOffsetY()
{
return mOffsetY;
}
void OnDestroy()
{
mDestroyed = true;
}
public void SetInVisible()
{
if (mDestroyed)
return;
mInvisible = false;
SetLabelScale(0);
}
public void SetFollowingObject(Transform trs)
{
mFollowingObject = trs;
// CheckCarInCamera check = trs.FindChild("Body").gameObject.AddComponent<CheckCarInCamera>();
// check.driverName = this;
}
private void SetLabelScale(float scale)
{
mTransform.localScale = new Vector3(scale, scale, scale);
}
void Start()
{
mTransform = transform;
m3DCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
mSceneCameraTransform = m3DCamera.transform;
m2DCamera = GameObject.Find("UI").transform.FindChild("Camera").GetComponent<Camera>();
mUICameraTransform = m2DCamera.transform;
mNFD = mCameraFar - mCameraNear;
}
void Update()
{
//Vector3 vPos = TransPos(m_goFollowing.position + new Vector3(0, m_fOffset, 0));
//mTransform.position = new Vector3(vPos.x, vPos.y, 0);
//mTransform.rotation = mUICameraTransform.rotation;
//float camD = (m_goFollowing.position - mSceneCameraTransform.position).magnitude;
//if (camD <= mCameraNear)
//{
// camD = mCameraNear;
//}
//float scale = Mathf.Clamp((mCameraFar - camD) / mNFD, 0f, 1) * mFactor;
//mTransform.localScale = new Vector3(scale, scale,scale);
mTransform.position = mFollowingObject.position;
mTransform.position += new Vector3(0,mOffsetY,0);
Vector3 vecUp = mSceneCameraTransform.rotation * Vector3.up;
mTransform.LookAt(mTransform.position + mSceneCameraTransform.rotation * Vector3.back, vecUp);
mTransform.Rotate(Vector3.up * 180);
}
//Transform WorldPos in 3DCamera to new WorldPos in 2DCamera. They share the same ScreenPos
Vector3 TransPos(Vector3 worldpos)
{
if (m3DCamera == null || m2DCamera == null)
{
return Vector3.zero;
}
Vector3 screenPos = m3DCamera.WorldToScreenPoint(worldpos);
Vector3 newWorldPos = m2DCamera.ScreenToWorldPoint(screenPos);
return newWorldPos;
}
}
相关文章推荐
- [Unity&特效]使用Projector投影仪来制作角色脚下的特效圆环以及技能指示器skill indicator
- unity中简单的血条制作
- Unity 3d之NGUI【特效制作 1】 制作血条,能量条
- Unity进阶 - 动画系统 - 给人物角色制作动画
- Unity创建角色血条
- 也谈Unity血条的制作
- 第一个游戏动作开发日志——Unity2D的血条制作
- unity 通过图片信息制作地形图
- 制作角色血条 [代码清单10-2]
- UGUI制作血条并跟随角色
- 角色血条制作
- NGUI血条制作及血条跟随角色目标
- unity 使用NGUI 显示角色血条和名字
- Unity插件NGUI制作血条--HUD的基本使用
- unity制作简单血条
- Unity制作头顶血条方式对比与优化
- Unity_血条的制作_056
- Unity制作血条
- 【Unity&NGUI】圆环血条制作&以及多层圆环血条的实现
- Unity之使用UGUI制作人物移动,血条跟随效果!