Задать вопрос
Пользователь пока ничего не рассказал о себе

Лучшие ответы пользователя

Все ответы (1)
  • Как сделать скрипт вращения объекта по оси Y плавным на зажатия левой кнопки мыши в юнити 2Д?

    @Gioo12x Автор вопроса
    Всем привет. Я закончил скрипт для игры над которым я работал и всем отвечающим (кроме freeExec) спасибо за ваши ответы. А теперь к самому скрипту точнее к скриптам.
    Чтоб сделать то что я хотел потребовалась 4 скрипта.
    Первый скрипт для поворот рук это тот же самый скрипт который я спросил как его изменить.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MouseLook : MonoBehaviour
    {
        public float offset;
    
        void Update()
        {
            Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
            float rotateZ = Mathf.Atan2(diference.y, diference.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rotateZ + offset);
    
            Vector3 LocalScale = Vector3.one;
    
            if(rotateZ > 90 || rotateZ <-90)
            {
                LocalScale.y = -1f;
            }
            else
            {
                LocalScale.y = +1f;
            }
            transform.localScale = LocalScale;
        }
       
    }

    второй для поворачивание персонажа в сторону мыши(то есть на 180 градусов в ту сторону где мышка).
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RotatePlayer : MonoBehaviour
    {
         Vector3 pos;
         Camera main;
       private void Start()
        {
            main = FindObjectOfType<Camera>();
        }
    
        void Update()
        {
            Flip();
    
            pos = main.WorldToScreenPoint(transform.position);
        }
    
        void Flip()
        {
            if(Input.mousePosition.x < pos.x)
            {
                transform.localRotation = Quaternion.Euler(0, 180, 0);
            }
            if (Input.mousePosition.x > pos.x)
            {
                transform.localRotation = Quaternion.Euler(0, 0, 0);
            }

    но есть одно большое НО эти скрипты работают постоянна, а нам нужно чтобы скрипты работали только тогда когда мышь зажата. Для этого существует третий скрипт он активирует эти скрипты когда мышь зажата.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BtnHoldDetect : MonoBehaviour
    {
    
        private MouseLook look;
        private GameObject Ruki;
    
    void Start()
        {
            GameObject ruki = GameObject.Find("Ruki");
            MouseLook look = ruki.GetComponent<MouseLook>();
            look.enabled = false;
    
            GameObject player = GameObject.Find("Player");
            RotatePlayer look2 = player.GetComponent<RotatePlayer>();
            look2.enabled = false;
        }
        void Update() {
            if (Input.GetMouseButtonDown(0)) {
                GameObject ruki = GameObject.Find("Ruki");
                MouseLook look = ruki.GetComponent<MouseLook>();
                look.enabled = true;
    
                GameObject player = GameObject.Find("Player");
                RotatePlayer look2 = player.GetComponent<RotatePlayer>();
                look2.enabled = true;
            }
            if (Input.GetMouseButtonUp(0))
            {
                GameObject ruki = GameObject.Find("Ruki");
                MouseLook look = ruki.GetComponent<MouseLook>();
                look.enabled = false;
    
                GameObject player = GameObject.Find("Player");
                RotatePlayer look2 = player.GetComponent<RotatePlayer>();
                look2.enabled = false;
            }
    
        }
    }

    Четвёртый скрипт для возращения рук к исходному положению. А если быть точнее когда руки находится в промежутке z>270 z<90 то руки поворачиваются к точке z=0, а если z<270 z>90 то они поворачиваются к точке z=180.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Rotation_Swap : MonoBehaviour
    
    {
        float  smooth= 5.0f;
        float toAngle1 = 0.0f;
        float toAngle2 = 180.0f;
     
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
            Vector3 LocalScale = Vector3.one;
            if ( (transform.eulerAngles.z > 270) ||(transform.eulerAngles.z < 90))
            {
                Quaternion target = Quaternion.Euler(0, 0, toAngle1);
                transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
                LocalScale.y = +1f;
            }
           else if ((transform.eulerAngles.z > 90)||(transform.eulerAngles.z < 270))
            {
                Quaternion target = Quaternion.Euler(0, 0, toAngle2);
              transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
               LocalScale.y = -1f;
            }
            transform.localScale = LocalScale;
    
    
        }
    }
    Ответ написан
    Комментировать