//... class
float pitch;
// ... Update
pitch = Mathf.Clamp(pitch - mouseY, -90f, 90f);
transform.Rotate(new Vector3(pitch, 0, 0));
using UnityEngine;
public class Example : MonoBehaviour {
// отступы, используйте, если не хотите, чтобы ваша панель спавнилась вплотную к границе
public float leftMargin = 0f;
public float rightMargin = 0f;
public float upMargin = 0f;
public float bottomMargin = 0f;
// объект для спавна
public RectTransform prefab;
// родительский объект для спавна в него
public Transform parent;
private void Update() {
if (Input.GetMouseButtonDown(0)) {
// получаем координаты клика
Vector2 clickPosition = Input.mousePosition;
// центрируем объект относительно границ экрана
clickPosition.x -= Screen.width / 2;
clickPosition.y -= Screen.height / 2;
// находим общие границы для спавна
float xMin = (prefab.sizeDelta.x - Screen.width) / 2;
float xMax = (Screen.width - prefab.sizeDelta.x) / 2;
float yMin = (prefab.sizeDelta.y - Screen.height) / 2;
float yMax = (Screen.height - prefab.sizeDelta.y) / 2;
// делаем отступы
xMin += leftMargin;
xMax -= rightMargin;
yMin += bottomMargin;
yMax -= upMargin;
// ограничиваем точку спавна этими границами
clickPosition.x = Mathf.Clamp(clickPosition.x, xMin, xMax);
clickPosition.y = Mathf.Clamp(clickPosition.y, yMin, yMax);
// спавним объект
var obj = Instantiate(prefab, parent);
// меняем его местоположение
obj.localPosition = clickPosition;
}
}
}
public IEnumerator GetRemoteTexture(string url, Action<Texture2D> response) {
UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success){
response(null);
} else {
response(DownloadHandlerTexture.GetContent(request));
}
}
using UnityEngine;
public class MusicDemo : MonoBehaviour {
public AudioSource audio; // в инспекторе сюда перетащите источник звука
public void OnPressed() { // привяжите к кнопке этот метод
if (audio.isPlaying) // если аудио играет
audio.Pause(); // поставить на паузу
else // иначе
audio.UnPause(); // снять с паузы
}
}
// ...
using System.Collections.Concurrent;
// ...
private readonly ConcurrentQueue<Action> _Actions = new ConcurrentQueue<Action>();
// ...
// Когда вам нужно что-то запустить из другого потока, вызываете тут
_Actions.Enqueue(() => {
// Ваш код
});
// ...
private void Update() {
while (_Actions.Count > 0)
if (_Actions.TryDequeue(out var action))
action?.Invoke();
// ...
}
using UnityEngine;
public class SimpleTrigger : MonoBehaviour {
public GameObject button;
private void OnTriggerEnter2D(Collider2D c) {
if (c.gameObject.tag == "Player")
button.SetActive(true);
}
}
if (Physics.Raycast(transform.position, _direction, out hit, 10f)) {
if (hit.collider == yourCollider) {
// some logic
}
}
private MyComponent GetTarget() {
if (Physics.Raycast(transform.position, _direction, out hit, 10f))
if (hit.transform.TryGetComponent(out MyComponent m))
return m;
return null;
}
using UnityEngine;
public class PlatformMove : MonoBehaviour {
// movement
private void OnCollisionEnter2D(Collision2D c) {
if (c.gameObject.tag == "Player")
c.transform.parent = transform;
}
private void OnCollisionExit2D(Collision2D c) {
if (c.gameObject.tag == "Player")
c.transform.parent = null;
}
}