public class Player:MonoBehaviour //скрипт игрока
{
public void Something() //метод в игроке который что то делает
{
}
}
public class TriggerZone : MonoBehaviour // скрипт на зоне
{
private void OnTriggerEnter(Collider other) // стандартный метод для триггера на вход объекта
{
if(other.TryGetComponent(out Player player)) //проверка что обьект содержит скрипт
{
player.Something(); //вызов метода из скрипта
}
}
}
using UnityEngine.SceneManagement;
static public class SceneWalker //как пример что бы не создавать обьект со скриптом
{
static public void SceneChanger(string sceneName,int sceneNumber =-1) // создаем метод перехода по имени или номеру сцены
{
if (sceneNumber>=0) SceneManager.LoadScene(sceneName);
else SceneManager.LoadScene(sceneName);
}
}
using UnityEngine;
public class SceneSelect : MonoBehaviour
{
void Start()
{
Invoke(nameof(LoadNewScene), 2f); // через 2 секунды запуск метода LoadNewScene()
}
void LoadNewScene()
{
Debug.Log("Loding");
SceneWalker.SceneChanger("Scene2",1); // обращаетмя к реализации SceneWalker для загрузки новой сцены тут или имя или порядок
}
}
[SerializeField]GameObject box; //обьект с анимацией
Animator _animator; // аниматор что содержит анимацию
void Start()
{
_animator = box.GetComponent<Animator>(); // получаем с обьекта компонент
float animTime = _animator.GetCurrentAnimatorStateInfo(0).length; // получаем время воспроизведения анимации
Invoke(nameof(LoadNewScene), animTime+0.1f); // запускам переход метод перехода на другую сцену через время анимации +0.1 сек
}
using UnityEngine;
public class SceneSelect : MonoBehaviour
{
public void LoadNewScene()
{
Debug.Log("Loading");
SceneWalker.SceneChanger("Scene2",1);
}
}
GameObject _screenbuttor; //элемент UI с подсказкой для открытия двери
LayerMask _doorMask;//маска двери
private void Update()
{
Transform cam = Camera.main.transform; // откуда пускаем луч будет просто камера
RaycastHit hitInfo; //информация о попадание луча
if (Physics.Raycast(cam.position,cam.forward,out hitInfo, 10f,_doorMask))
{
Debug.Log("hit work"); //проверка что все работает
_screenbuttor.SetActive(true); // подсказку активной
}
else
{
_screenbuttor.SetActive(false);
}
if (_screenbuttor.activeSelf && Input.GetKeyDown(KeyCode.E)) //если подсказка активна и нажата кнопка E
{
Debug.Log("Door Interactive"); // проверяем что все сработало
hitInfo.collider.GetComponent<Door>().InteractingDoor(); // вызываем метод для работы с дверью
}
using UnityEngine;
public class Door : MonoBehaviour
{
[SerializeField] bool _isOpen;
// public bool isOpen=> _isOpen;
public void InteractingDoor()
{
Debug.Log("Use Door Interact"); // проверяем что перешли в другой скрипт
if (_isOpen) CloseDoor();
else OpenDoor();
}
void CloseDoor()
{
Debug.Log("Close Door"); //проверяем что включился метод для закрытия двери
//Ну тут действия для закрытия
}
void OpenDoor()
{
Debug.Log("Open Door"); //проверяем что включился метод для открытия двери
//Тут действия для открытия
}
}
public void SetTarget(Transform target)
{
player = target;
}
GameObject newEnemy = Instantiate(_enemy.gameObject);
newEnemy.GetComponent<Enemy>().SetTarget(_player.transform);
Transform player == (Player)pl.gameObject.transform
Transform enemy ==this.transform == enemyObject.transform
void Spawner(Transform spawnPos)
{
RaycastHit[] hits= Physics.SphereCastAll(spawnPos.position, Radius, spawnPos.up, 2f, _enemymask, QueryTriggerInteraction.UseGlobal);
if (hits.Length > 0) return;
GameObject enemy = Instantiate(_enemy.gameObject, spawnPos);
}
Vector2 _moveDir;
Rigidbody2D _rb;
[SerializeField] float _speed=5f;
bool _blockMoveUpdate;
void Start()
{
_rb = GetComponent<Rigidbody2D>();
ShootUpdate(transform.right);
}
private void ShootUpdate(Vector2 newDir)
{
_moveDir = newDir.normalized;
_rb.velocity = _moveDir*_speed;
if(_blockMoveUpdate)_blockMoveUpdate = false;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (!_blockMoveUpdate)
{
_blockMoveUpdate = true;
var coll = collision.contacts[0];
Vector2 newMove = Vector2.Reflect(_rb.velocity.normalized, coll.normal);
ShootUpdate(newMove);
}
}