void OnCollisionEnter2D(Collision2D c) {
Debug.Log(c.gameObject.name); // выводит в консоль название объекта, с которым владелец скрипта столкнулся
}
// поля класса
public Transform groundCheckPoint;
public float range;
public LayerMask groundLayers;
// сама инструкция
bool isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, range, groundLayers);
// в вашем коде имеет смысл как-то так сделать
void Jump() {
if(Physics2D.OverlapCircle(groundCheckPoint.position, range, groundLayers))
rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
[SerializeField] public float speed = 10f;
[SerializeField] public float jumpForce = 14f;
[SerializeField] private float speed = 10f;
[SerializeField] private float jumpForce = 14f;
private float xInput;
private void Update() {
xInput = Input.GetAxis("Horizontal");
// code
}
private void FixedUpdate() {
rb.velocity = new Vector2(xInput * speed, rb.velocity.y);
}
hit.collider.transform.parent.GetComponent<DoorScript>().count_v();
hit.collider.transform.root.GetComponent<DoorScript>().count_v();
hit.transform.root.GetComponent<DoorScript>().count_v();
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class user : MonoBehaviour {
public float Distens = 0f;
void Update() {
if (Input.GetKeyDown(KeyCode.E)) {
Ray ray = new Ray (transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Distens))
if (hit.transform.root.TryGetComponent(out DoorScript door))
door.count_v();
}
}
}
if (!oneApple) {
if (Input.GetKeyUp(KeyCode.Q)) {
createApple();
GameObject apple = GameObject.Find("apple");
oneApple = true;
}
}
if (oneApple) {
apple.transform.position -= new Vector3(0, 0, 5 * Time.deltaTime);
if (apple.transform.position.z < -15) {
Destroy(apple);
oneApple =false;
}
}
if (!oneApple) {
if (Input.GetKeyUp(KeyCode.Q)) {
createApple();
apple = GameObject.Find("apple");
oneApple = true;
}
}
// Данный код
GameObject createApple() {
GameObject result = new GameObject("apple");
GameObject apple = null;
apple = apllePrefab;
Vector3 applePos = transform.position + new Vector3 (1, 0.5f,1);
if (apple != null) {
GameObject go = Instantiate(apllePrefab, applePos,Quaternion.identity);
}
return result;
}
// Можно заменить на такой без потери смысла
GameObject сreateApple() {
var applePos = transform.position + new Vector3(1, 0.5f, 1);
return Instantiate(apllePrefab, applePos, Quaternion.identity);
}
// Далее в этом фрагменте вы сначала помещаете объект на сцену, а затем пытаетесь его найти
if (!oneApple) {
if (Input.GetKeyUp(KeyCode.Q)) {
createApple();
apple = GameObject.Find("apple");
oneApple = true;
}
}
// Не то чтобы метод GameObject.Find вообще не стоило
// никогда использовать, но обычно есть более практичные
// способы это сделать. Например передать прямую ссылку:
if (!oneApple) {
if (Input.GetKeyUp(KeyCode.Q)) {
apple = сreateApple();
oneApple = true;
}
}
var enemies = GameObject.FindGameObjectsWithTag("Enemy");
if (enemies.Length > 0) {
// действие
}
var enemies = FindObjectsOfType<Enemy>();
if (enemies.Length > 0) {
// действие
}
public List<Enemy> enemies = new List<Enemy>();
// ...
var enemy = Instantiate(...);
enemies.Add(enemy);
// чтобы скрипт врага мог общаться с контроллером, передадим туда ссылку
enemy.spawner = this;
// и метод логики удаления
public void Remove(Enemy e) {
enemies.Remove(e);
if (enemies.Count > 0) {
// действие
}
}
public Spawner spawner;
// ...
if (health <= 0) {
spawner.Remove(this); // удаляем этого врага из списка спаунера
Destroy(gameObject); // уничтожаем его объект
}
public GameObject text; // ссылка на внутреннее текстовое поле
// ...
public void OnClick() { // привязать к кнопке
text.SetActive(!text.activeSelf); // переключает видимость
}
private void OnCollisionEnter(Collision c) {
if (c.gameObject.layer == 6) { // порядковый номер искомого слоя
// do anything
}
}
public void Jump() {
rb2d.AddForce(Vector2.up * jumpPower);
}
public int jumpsLimit;
public int jumpsDone;
public void Jump() {
if (jumpsDone < jumpsLimit) {
rb2d.AddForce(Vector2.up * jumpPower);
jumpsDone++;
}
}
// очередь команд
private readonly ConcurrentQueue<Action> _Actions = new ConcurrentQueue<Action>();
// получаете сообщение - ставите в очередь
private void OnMessage(object sender, MessageEventArgs e) {
_Actions.Enqueue(() => ReadResponse(e.Data));
}
// каждое обновление экрана запускаем всю очередь
private void Update() {
while (_Actions.Count > 0)
if (_Actions.TryDequeue(out var action))
action?.Invoke();
}
// вот тут вы уже можете влиять на тот же текст
private void ReadResponse(string data) {
// ваш код
}