Я не знаю, как сделать «правильно», поэтому пишу просто набор инструкций. Скорее всего можно сделать все гораздо лучше и по «фэншуй».
1. Для объекта добавить дочерний объект, который будет представлять форму щита. Я добавляю сферу и называю ее «ShieldSphere».
2. Устанавливаю для нее нужный мне размер
3. Создаем новый материал, используя шейдер Shield, там же можно скачать изображения для материала. Во вложении версия для Unity 5: Shield.
4. Текстура для шейдера:
5. Эффект щита добавляем скриптом:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shield : MonoBehaviour
{
private float shieldTimer;
private GameObject shieldObj;
private bool isShielded;
public bool Shielded
{
set
{
isShielded = value;
}
get
{
return isShielded;
}
}
// Use this for initialization
void Start()
{
isShielded = true;
shieldTimer = 10f;
shieldObj = transform.FindChild("ShieldSphere").gameObject;
// Allow only one instance of this script
if (shieldObj.activeSelf)
{
Destroy(this);
return;
}
}
// Update is called once per frame
void Update()
{
if (isShielded)
{
StartCoroutine("ShieldEffect");
}
else
{
Destroy(this, 1.0f);
}
}
IEnumerator ShieldEffect()
{
if (isShielded)
{
shieldObj.SetActive (true);
isShielded = true;
yield return new WaitForSeconds(shieldTimer);
shieldObj.SetActive(false);
isShielded = false;
}
}
}
6. Чтобы снизить повреждения при активном щите, добавляем в файл ShellExplosion.cs строки:
if (targetRigidbody.GetComponent() && targetRigidbody.GetComponent().Shielded)
{
damage *= 0.5f;
}
DenTNT недавно публиковал (посмотреть все)
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024