Задать вопрос
  • Как сделать чтобы звук в юнити продолжал воспроизводиться при включении нового?

    Gromer-Top
    @Gromer-Top Автор вопроса
    Gromer-Top, вот весь скрипт, взят из открытого источника
    Написано
  • Как сделать чтобы звук в юнити продолжал воспроизводиться при включении нового?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7,
    using System.Collections;
    using UnityEngine;
    
    [RequireComponent(typeof(AudioSource))]
    
    public class Weapon : MonoBehaviour
    {
        public bool singleFire = false;
        public float fireRate = 0.1f;
        public GameObject bulletPrefab;
        public Transform firePoint;
        public int bulletsPerMagazine = 30;
        public float timeToReload = 1.5f;
        public float weaponDamage = 15; //How much damage should this weapon deal
        public AudioClip fireAudio;
        public AudioClip reloadAudio;
    
        [HideInInspector]
        public WeaponManager manager;
    
        float nextFireTime = 0;
        bool canFire = true;
        int bulletsPerMagazineDefault = 0;
        AudioSource audioSource;
    
        // Start is called before the first frame update
        void Start()
        {
            bulletsPerMagazineDefault = bulletsPerMagazine;
            audioSource = GetComponent<AudioSource>();
            audioSource.playOnAwake = false;
            //Make sound 3D
            audioSource.spatialBlend = 1f;
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0) && singleFire)
            {
                Fire();
            }
            if (Input.GetMouseButton(0) && !singleFire)
            {
                Fire();
            }
            if (Input.GetKeyDown(KeyCode.R) && canFire)
            {
                StartCoroutine(Reload());
            }
        }
    
        void Fire()
        {
            if (canFire)
            {
                if (Time.time > nextFireTime)
                {
                    nextFireTime = Time.time + fireRate;
    
                    if (bulletsPerMagazine > 0)
                    {
                        //Point fire point at the current center of Camera
                        Vector3 firePointPointerPosition = manager.playerCamera.transform.position + manager.playerCamera.transform.forward * 100;
                        RaycastHit hit;
                        if (Physics.Raycast(manager.playerCamera.transform.position, manager.playerCamera.transform.forward, out hit, 100))
                        {
                            firePointPointerPosition = hit.point;
                        }
                        firePoint.LookAt(firePointPointerPosition);
                        //Fire
                        GameObject bulletObject = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
                        Bullet bullet = bulletObject.GetComponent<Bullet>();
                        //Set bullet damage according to weapon damage value
                        bullet.SetDamage(weaponDamage);
    
                        bulletsPerMagazine--;
                        audioSource.clip = fireAudio;
                        audioSource.Play();
                    }
                    else
                    {
                        StartCoroutine(Reload());
                    }
                }
            }
        }
    
        IEnumerator Reload()
        {
            canFire = false;
    
            audioSource.clip = reloadAudio;
            audioSource.Play();
    
            yield return new WaitForSeconds(timeToReload);
    
            bulletsPerMagazine = bulletsPerMagazineDefault;
    
            canFire = true;
        }
    
        //Called from WeaponManager
        public void ActivateWeapon(bool activate)
        {
            StopAllCoroutines();
            canFire = true;
            gameObject.SetActive(activate);
        }
    }
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, сложно, буду потом разбираться.
    Этот вопрос будет долго жить
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    Gromer-Top, скорее всего isGrounded виноват
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    Gromer-Top, все сломалосб, прыжок только если достигаешь определенной скорости передвижения
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    так лучше?

    using UnityEngine;
    
    public class MovePlayer : MonoBehaviour 
    {
        private CharacterController _controller;
        private Vector3 _playerVelocity;
        private Vector3 _moveDir;
        private bool _groundedPlayer;
        [SerializeField] private float _playerSpeed = 0.1f;
        [SerializeField] private float _jumpHeight = 1.0f;
        [SerializeField] private float _gravityValue = -9.81f;
    
        private void Start()
        {
            _controller = gameObject.AddComponent<CharacterController>();
        }
    
        void Update()
        {
            _moveDir = _controller.transform.forward * Input.GetAxis("Vertical") + _controller.transform.right * Input.GetAxis("Horizontal");
            _groundedPlayer = _controller.isGrounded;
            if (Input.GetButtonDown("Jump") && _groundedPlayer)
            {
                _playerVelocity.y += Mathf.Sqrt(_jumpHeight * -3.0f * _gravityValue);
            }
            Gravity();
            MovementLogic();
        }
    
        void MovementLogic()
        {
            _controller.Move(_moveDir * _playerSpeed * Time.deltaTime);
    
        }
    
        void Gravity()
        {
            if (_groundedPlayer && _playerVelocity.y < 0){
                _playerVelocity.y = 0f;
            }
            _playerVelocity.y += _gravityValue * Time.deltaTime;
            _controller.Move(_playerVelocity * Time.deltaTime);
        }
    }
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, второй вызов move для того чтобы прыжок работал
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, спасибо.
    С маленькой пишу, так как видел это у многих в коде. Думал они понимают что пишут, видимо нет.
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, я не знаю зачем два раза вызывал. Редактировал много, ошибок наделал. Позже отредактирую и может быть пришлю код, может кому-то поможет.

    Глупые ошибки, так как только 2-3 дня в юнити.
    Написано
  • Как убрать Visual Scripting в Unity 2021?

    Gromer-Top
    @Gromer-Top Автор вопроса
    Спасибо!
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    решил пойти через контроллер
    using UnityEngine;
    
    public class movePlayer : MonoBehaviour 
    {
        private CharacterController _controller;
        private Vector3 _playerVelocity;
        private Vector3 _moveDir;
        private bool _groundedPlayer;
        [SerializeField] private float _playerSpeed = 2.0f;
        [SerializeField] private float _jumpHeight = 1.0f;
        [SerializeField] private float _gravityValue = -9.81f;
    
        private void Start()
        {
            _controller = gameObject.AddComponent<CharacterController>();
        }
    
        void Update()
        {
            _moveDir = _controller.transform.forward * Input.GetAxis("Vertical") + _controller.transform.right * Input.GetAxis("Horizontal");
        }
    
        void FixedUpdate()
        {
            movementLogic();
        }
    
        void movementLogic()
        {
            _groundedPlayer = _controller.isGrounded;
            if (_groundedPlayer && _playerVelocity.y < 0){
                _playerVelocity.y = 0f;
            }
            _controller.Move(_moveDir * _playerSpeed);
            if (Input.GetButtonDown("Jump") && _groundedPlayer)
            {
                _playerVelocity.y += Mathf.Sqrt(_jumpHeight * -3.0f * _gravityValue);
            }
            _playerVelocity.y += _gravityValue * Time.deltaTime;
            _controller.Move(_playerVelocity * Time.deltaTime);
        }
    }


    спасибо за помощь!
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    и при столкновении мой игрок-капсула начинает крутиться по Y
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, проверил скрипт, но у меня работал не правильно, нужно было так:
    void Update()
        {
            _moveDir = _rb.transform.forward * Input.GetAxis("Vertical") + _rb.transform.right * Input.GetAxis("Horizontal");
        }
    private void MovementLogic()
        {
            _rb.AddForce(_moveDir*_moveSpeed, ForceMode.VelocityChange);
        }

    опечатка была в tran(s)form и в Input.GetAxis нужно было поменять Horizontal и Vertical

    но у меня персонаж слишком быстро разгоняется и скользит, игра на подобии шутера, не хотелось бы что бы игрок скользил
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, не совсем понял.
    IGridClikerAction - название скрипта, а _grid как бы имя.?
    То есть аналог как в python'e
    import IGridClikerAction as _grid?
    Или всё таки создание объекта класса.
    Ну а дальше первый метод вроде понятен, а второй нет.
    Но я думаю вопрос можно закрывать, думаю уже в других вопросах буду спрашивать то, что не смогу найти.
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    DrRen7, спасибо, завтра проверю код и напишу.

    По поводу разбиения, хочу сразу изначально правильно учиться. Опыт с другими языками есть на уровне базы. В некоторых чуть выше.

    Ещё интересует вопрос, как использовать функции из другого скрипта? Нужно ли импортировать класс/скрипт в код и т.д. Думаю что-то типа Input Manager'a сделать, но думаю это лишнее.

    P. S. И стоит ли разбивать текстуры на файлы, или в одном хранить? Пока что модели просто цветные и все цвета в одном файле, а вот дальше думаю стоит разбивать.

    И плюс [Serialize Field] не понимаю, так как не видел в других языках.
    Написано
  • Как реализовать контроллер игрока в юнити?

    Gromer-Top
    @Gromer-Top Автор вопроса
    Движение камеры я уже смог реализовать.
    Меня интересует движение самого игрока.
    Допустим, нажимаю W и он бежит вперёд относительно камеры.
    И кстати, только начинаю юнити изучать. Стоит ли два скрипта делать: один движение камеры, другой игрока. Или в одном всё? И public GameObject стоит ли объявлять?
    Написано