buff制作

游戏人物头顶的buff制作


直接上干货,第一个脚本负责生成buff并挂载到英雄头顶。
public class ShowBuff : MonoBehaviour {

public GameObject target;

float characterControllerHeight;

Transform targetTransform;

Renderer targetRenderer;

Vector3 targetPosition;


void Awake()
{
    this.transform.SetParent(GameObject.Find("BloodshowPanel").GetComponent<Transform>(), false);
    SetTarget(target);
}
// Use this for initialization
void Start () {
	
}

// Update is called once per frame
void Update () {
    // Destroy itself if the target is null, It's a fail safe when Photon is destroying Instances of a Player over the network
    if (target == null)
    {
        Destroy(this.gameObject);
        return;
    }
}

public void SetTarget(GameObject _target)
{

    if (_target == null)
    {
      //  Debug.LogError("<Color=Red><b>Missing</b></Color> PlayMakerManager target for PlayerUI.SetTarget.", this);
        return;
    }

    // Cache references for efficiency because we are going to reuse them.
    this.target = _target;
    targetTransform = this.target.GetComponent<Transform>();
    targetRenderer = this.target.GetComponent<Renderer>();
    
    CharacterController _characterController = this.target.GetComponent<CharacterController>();

    if (_characterController != null)
    {
        //characterControllerHeight = _characterController.height;
        characterControllerHeight = this.target.GetComponent<MeshFilter>().mesh.bounds.size.y;
    }
    
}


void LateUpdate()
{

    // Do not show the UI if we are not visible to the camera, thus avoid potential bugs with seeing the UI, but not the player itself.
    if (targetRenderer != null)
    {
        this.gameObject.SetActive(targetRenderer.isVisible);
    }

    // #Critical
    // Follow the Target GameObject on screen.
    if (targetTransform != null)
    {
        targetPosition = targetTransform.position;
        targetPosition.y += 1.8f;
        this.transform.position = Camera.main.WorldToScreenPoint(targetPosition) + new Vector3(0, 30, 0);
    }
}

}

第二个脚本放在图片的预制件上。负责播放buff帧动画。

public class InitISprites : MonoBehaviour {

public Sprite[] loadingTextures;//异步加载时实现帧动画的图片组
public Image loadingImage;//切换场景时图片载体
public float cele_rate = 1;
float curTexture = 0;//用于帧动画的图片
int curIndex = 0;//当前索引值                               
void Start () {
	
}


void Update () {
    ChangeTexture();//改变帧动画图片的方法
}

void ChangeTexture()
{//切换场景帧动画的实现
    if (!loadingImage.gameObject.activeInHierarchy) return;//如果当前的图片载体没有被禁用
    curTexture += Time.deltaTime * 8* cele_rate;//当前图片浮点型索引值增加
    curIndex = (int)curTexture;//当前图片索引值
    loadingImage.sprite = loadingTextures[curIndex % 7];//切换图片
}

}

第三个调用buff
private IEnumerator Celebrate_rocket(float v)
{
GameObject sele_prefab = (GameObject)Resources.Load(“effects/Cele_rocket”);
sele_prefab = Instantiate(sele_prefab);
sele_prefab.SendMessage(“SetTarget”, this.gameObject, SendMessageOptions.RequireReceiver);

        yield return new WaitForSeconds(5);

        Destroy(sele_prefab, 0.1f);
    }
发布了49 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_23158477/article/details/103295292