目录
三.操作:一:效果不好(因为我的飞机是不断飞行的):头顶名称
一.目的
1.想知道:Unity中如何制作血条或头顶名称
二.参考
1.Unity3d制作血条的三种方法
https://gameinstitute.qq.com/community/detail/120938
- 总结:待检测
三.操作:一:效果不好(因为我的飞机是不断飞行的):头顶名称
1.运行结果:效果不好
1.代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 功能:显示敌人的名字条
/// </summary>
public class MyEnemy_name_bar : MonoBehaviour
{
/// <summary>obj:姓名条预制件</summary>
[Tooltip("obj:姓名条预制件")]
[Header("obj:姓名条预制件")]
public GameObject obj_name_bar;
/// <summary>obj:姓名条实例化</summary>
private GameObject obj_name_bar_Instantiate;
/// <summary>Vector3:敌人的屏幕坐标</summary>
private Vector3 EnemySceenPosition;
/// <summary>Vector3:姓名条和敌人屏幕坐标的偏移</summary>
[Tooltip("Vector3:姓名条和敌人屏幕坐标的偏移")]
[Header("Vector3:姓名条和敌人屏幕坐标的偏移")]
public Vector3 vec3_nameBarAndEnemy_offset;
/// <summary>float:SmoothDamp的时间</summary>
[Tooltip("float:SmoothDamp的时间")]
[Header("float:SmoothDamp的时间")]
[Range(0,0.1f)]
public float fSmoothTime=0.001f;
void Start()
{
//把游戏物体的世界坐标转换为屏幕坐标
EnemySceenPosition = Camera.main.WorldToScreenPoint(transform.position);
//创建一个姓名条
obj_name_bar_Instantiate = Instantiate(obj_name_bar, EnemySceenPosition, Quaternion.identity);
//设置姓名条的父物体
GameObject obj_Canvas_nameBar = GameObject.Find("Canvas_nameBar");
if (obj_Canvas_nameBar)
{
obj_name_bar_Instantiate.transform.SetParent(obj_Canvas_nameBar.transform);
}
else
{
Debug.LogError("姓名条Canvas_nameBar没有找到!");
}
switch (this.tag)
{
case "Enemy_f22":
SetSetName("美军F22");
break;
default:
break;
}
}
void Update()
{
//没帧都去执行使血条跟随物体
SetNameBarFollowEnemy();
}
/// <summary>
/// 功能:通过敌人标签修改Text的内容,也就是修改姓名条的内容
/// </summary>
void SetSetName(string _strName)
{
obj_name_bar_Instantiate.GetComponent<Text>().text = _strName;
}
/// <summary>
/// 功能:设置姓名条跟随敌人移动
/// </summary>
void SetNameBarFollowEnemy()
{
//测试:1:完成(but:太抖了):姓名条跟随敌人移动
EnemySceenPosition = Camera.main.WorldToScreenPoint(transform.position) + vec3_nameBarAndEnemy_offset;//把物体坐标转换为屏幕坐标,修改偏移量
obj_name_bar_Instantiate.transform.position = EnemySceenPosition;
测试:2:待检测:姓名条跟随敌人移动+解决太抖的事情
//EnemySceenPosition = Camera.main.WorldToScreenPoint(transform.position) + vec3_nameBarAndEnemy_offset;//把物体坐标转换为屏幕坐标,修改偏移量
//Vector3 currentVelocity = new Vector3(0, 0, 0);
//Vector3 cameraVelocity = Vector3.zero;
//obj_name_bar_Instantiate.transform.position=Vector3.SmoothDamp(obj_name_bar_Instantiate.transform.position, EnemySceenPosition, ref cameraVelocity, fSmoothTime);
}
}
1.Unity设置
三.操作:二:完成(不使用代码):头顶名称
1.运行效果
- 总结:如果要优化,可以将Sprite一直垂直于相机,这样能看到最完整的图片。
1.创建2DObject的Sprite
- 创建2DObject的Sprite
- 制作好图片,然后将图片拖到内部,