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>