Unity
- 21 ответ
- 0 вопросов
23
Вклад в тег
sceneWidth, Screen.width, Screen.height
, а значит запускать этот код можно не каждый апдейт, а только тогда, когда изменяются эти переменные. Выносите код в отдельный метод и вызываете его при каждом изменении этих переменных. У Screen
наверняка есть событие, которое умеет сообщать об изменениях размера экрана, подписываете на него метод. sceneWidth
можно превратить в свойство, которое в set
также будет вызывать этот метод. OpenSmileMenu()
. Так вот, пускай этот метод имеет параметр Action<Sprite>
. Что должно передаваться? Ссылка на метод класса кнопки по которому кликнули, который принимает в себя спрайт и этот спрайт уже применяет к изображению кнопки. private void UpdateSprite(Sprite sprite){
spriteRenderer.sprite = sprite;
}
Что происходит в OpenSmileMenu(Action<Sprite> callback)
? В нём мы этот колбек прибавляем к событию: SmileChoosed += callback;
private void OnClick(Button button){
callback?.Invoke(button.GetComponent<SpriteRenderer>().sprite);
CloseSpriteMenu();
}
Start()
с помощью LookAt()
.[SerializeField] private Transform _focus;
[SerializeField] private float rotationSpeed = 1;
[SerializeField] private float moveSpeed = 1;
private void Start(){
//
tramsform.LookAt(_focus);
//
}
private void RotateCamera()
{
if (Input.GetMouseButton(1))
{
float mouseMove = Input.GetAxis("Mouse X") * rotationSpeed;
_focus.Rotate(0, mouseMove, 0); //-mouseMove для инвертирования
Debug.Log("Rotation " + mouseMove.ToString());
}
}
private void MoveCamera()
{
if (Input.GetMouseButton(0))
{
Vector3 mouseMove = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y")) * moveSpeed;
_focus.Translate(mouseMove, Space.Self); //-mouseMove для инвертирования
Debug.Log("Moving " + mouseMove.ToString());
}
}
<code lang="cs">
//your code
</code>