Answer the question
In order to leave comments, you need to log in
An error pops up, how to solve?
I do according to the book. when starting the game, the error
Assets/ReactiveTarget.cs(11,32): error CS0411: The type arguments for method 'Component.GetComponent()' cannot be inferred from the usage. Try specifying the type arguments explicitly. how to solve it?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ReactiveTarget : MonoBehaviour
{
public void ReactToHit()//метод вызванный сценарием
{
WanderingAI behavior = GetComponent();
if (behavior != null) //проверяем присоеденен ли к персонажу сценарий WanderingAI; он может и отсутствовать
{
behavior.SetAlive(false);
}
StartCoroutine(Die());
}
private IEnumerator Die()//опрокидываем врага, ждем 1,5 секунды и уничтожаем его
{
this.transform.Rotate(-75, 0, 0);
yield return new WaitForSeconds(1.5f);
Destroy(this.gameObject); //объект может уничтожить сам себя точно так же, как любой другой объект
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WanderingAI : MonoBehaviour
{
public float speed = 3.0f;//значение для скорости движения и расстояния, с которого начинается реакция на препятствие
public float obstacleRange = 2.0f;
private bool _alive;
// Start is called before the first frame update
void Start()
{
_alive = true;
}
// Update is called once per frame
void Update()
{
if (_alive)
{
transform.Translate(0, 0, speed * Time.deltaTime);// непрерывно движемся вперед в каждом кадре, несмотря на повороты.
Ray ray = new Ray(transform.position, transform.forward);//луч находится в том же положении и нацеливается в том же направлении, что и персонаж
RaycastHit hit;
if (Physics.SphereCast(ray, 0.75f, out hit)) // бросаем луч с описанной вокруг него окружностью
{
if (hit.distance < obstacleRange)
{
float angle = Random.Range(-110, 110);// поворот с наполовину случайным выбором нового направления
transform.Rotate(0, angle, 0);
}
}
}
}
public void SetAlive(bool alive)//открытый метод, позволяющий внешнему коду воздействовать на "живое" состояние.
{
_alive = alive;
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question