Я создаю игру, и у меня есть мир, созданный с помощью Perlin-Noise. Я порождаю деревья в случайном «травяном» месте, а затем хочу иметь возможность дать дереву здоровье, чтобы его можно было рубить.
else if(noise <= 0.43)//gras
{
int treeNumber = Random.Range(0,100);
if(treeNumber <5)
{
GameObject makeTree = Instantiate(tree[0], pos, Quaternion.identity);
}
}
У меня есть дерево спрайтов с компонентом скрипта
public static int treesHealth;
// Start is called before the first frame update
void Start()
{
treesHealth = 100;
}
У меня есть игрок со сценарием боя
public void DoDamage(int amount, int startTreeHealt)
{
Vector3 origin = playerpos;
int range = 1;
RaycastHit2D[] hit = Physics2D.RaycastAll(origin,dir,range);//startpos, direction, range
for(int i = 0; i < hit.Length; i++)
{
if(hit[i].transform.gameObject.layer == LayerMask.NameToLayer("nature"))
{
Vector3 hitpos = hit[i].transform.position;
treeHealth.treesHealth = treeHealth.treesHealth - amount;
if(treeHealth.treesHealth < 1)
{
Destroy(hit[i].transform.gameObject);
GameObject makeTrunks = Instantiate(treeTrunks, hitpos, Quaternion.identity);
}
return;
}
}
Поначалу кажется, что все работает хорошо, но есть 2 сценария, в которых все идет не так. когда я пару раз ударил по дереву (недостаточно, чтобы «порубить его») и пошел к другому дереву.
Когда я иду к другому дереву, я выхожу за пределы экрана и создаются новые деревья.
- Здоровье уже пораженных деревьев восстанавливается до 100
Когда я иду к другому дереву, я не выхожу «за пределы экрана», и не создаются новые деревья
- 2-е, и все другие деревья имеют то же здоровье, что и уже пораженное дерево
Я хочу быть в состоянии ударить деревья независимо. Деревья должны «помнить», сколько у них осталось здоровья.
Я совершенно заблудился, как этого добиться, но я думаю, что скрипт, прикрепленный к дереву, не способ, которым я могу это сделать.
Я надеюсь, что кто-то может помочь мне в правильном направлении, спасибо за ваше время и помощь.