0
1 год назад

Unity 3D скрипты Unity 3D скрипты

Основная информация

Скрипты по Unity 3d движку

https://docs.unity3d.com/ru/530/Manual/Animator.html

Посты перейти

от
до
от
до
Вот пример скрипта на Unity 3D для лазания по скале:   csharp using System.Collections; using System.Collections.
00:54
114
Вот пример скрипта на Unity 3D для смены меча:   csharp using System.Collections; using System.Collections.
00:52
122

Стена группы

ARTZINE 1 год назад #
2 ответа
ARTZINE 1 год назад #

Поскольку движок скриптовый, то и к нему будет много скриптов

1 ответ
ARTZINE 1 год назад #

Коллайдеры (Colliders)

Компоненты коллайдера определяют форму объекта для физических столкновений. Невидимый коллайдер не обязательно должен иметь ту же форму, что и сетка объекта, и на самом деле грубое приближение часто более эффективно и неразличимо в игровом процессе.

Самые простые (и наименее ресурсоемкие) коллайдеры — это так называемые типы примитивных коллайдеров. В 3D это Box Collider, Sphere Collider и Capsule Collider. В 2D можно использовать Box Collider 2D и Circle Collider 2D. Любое их количество может быть добавлено к одному объекту для создания составных коллайдеров .

При тщательном позиционировании и изменении размера составные коллайдеры часто могут довольно хорошо аппроксимировать форму объекта, сохраняя при этом низкую нагрузку на процессор. Дополнительную гибкость можно получить за счет дополнительных коллайдеров на дочерних объектах (например, прямоугольники можно поворачивать относительно локальных осей родительского объекта). При создании такого составного коллайдера должен быть только один компонент Rigidbody, размещенный на корневом объекте в иерархии.

Обратите внимание, что примитивные коллайдеры не будут корректно работать с сдвиговыми преобразованиями — это означает, что если вы используете комбинацию поворотов и неравномерных масштабов в иерархии преобразований, чтобы результирующая форма больше не соответствовала примитивной форме, примитивный коллайдер не будет уметь правильно представлять.

Однако бывают случаи, когда даже составные коллайдеры недостаточно точны. В 3D вы можете использовать коллайдеры сетки, чтобы точно соответствовать форме сетки объекта. В 2D Polygon Collider 2D, как правило, не будет идеально соответствовать форме спрайта, но вы можете уточнить форму до любого уровня детализации, который вам нравится. Однако эти коллайдеры гораздо более требовательны к процессору, чем примитивные типы, поэтому используйте их экономно, чтобы поддерживать хорошую производительность. Кроме того, меш-коллайдер обычно не может столкнуться с другим меш-коллайдером (т. е. ничего не произойдет, когда они вступят в контакт). В некоторых случаях вы можете обойти это, пометив коллайдер сетки как Convex.в инспекторе. Это создаст форму коллайдера в виде «выпуклой оболочки», которая похожа на исходную сетку, но с заполненными поднутрениями. Преимущество этого заключается в том, что коллайдер выпуклой сетки может сталкиваться с другими коллайдерами сетки, поэтому вы можете использовать эту функцию. когда у вас есть подвижный персонаж с подходящей формой. Однако хорошим общим правилом является использование коллайдеров сетки для геометрии сцены и аппроксимация формы движущихся объектов с помощью составных примитивных коллайдеров.

Коллайдеры могут быть добавлены к объекту без компонента Rigidbody для создания полов, стен и других неподвижных элементов сцены. Их называют статическими коллайдерами. Как правило, вы не должны перемещать статические коллайдеры, изменяя положение Transform, так как это сильно повлияет на производительность физического движка. Коллайдеры на объекте, у которого есть Rigidbody, называются динамическими коллайдерами. Статические коллайдеры могут взаимодействовать с динамическими коллайдерами, но, поскольку у них нет Rigidbody, они не будут двигаться в ответ на столкновения.

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

Физические материалы (Physics Materials)

Когда коллайдеры взаимодействуют, их поверхности должны имитировать свойства материала, который они должны представлять. Например, лист льда будет скользким, в то время как резиновый мяч будет создавать сильное трение и будет очень упругим. Хотя форма коллайдеров не деформируется при столкновениях, их трение и отскок можно настроить с помощью Physics Materials. Получение правильных параметров может потребовать проб и ошибок, но, например, ледяной материал будет иметь нулевое (или очень низкое) трение, а резиновый материал будет иметь высокое трение и почти идеальную упругость. См. справочные страницы для Физического материала и Физического материала 2D.для получения дополнительной информации о доступных параметрах. Обратите внимание, что по историческим причинам 3D-ресурс на самом деле называется Физический материал ( без буквы S), а 2D-эквивалент называется Физический материал 2D ( с буквой S).

Триггеры (Triggers)

Система сценариев может определять, когда происходят

ARTZINE 1 год назад #

Нужно изучать мануал

ARTZINE 1 год назад #

var soundFire: AudioClip;

var soundReload: AudioClip;

var range = 100.0;

var fireRate = 0.05;

var force = 10.0;

var damage = 5.0;

var bulletsPerClip = 30;

var clips = 20;

var waitTime = 0.5;

var reloadTime = 2.6;

private var hitParticles: ParticleEmitter;

var muzzleFlash: Renderer;

private var bulletsLeft: int = 0;

private var nextFireTime = 0.0;

private var m_LastFrameShot = -1;

function Start () {

   hitParticles = GetComponentInChildren(ParticleEmitter);

   // We don't want to emit particles all the time, only when we hit something.

   if (hitParticles)

      hitParticles.emit = false;

   bulletsLeft = bulletsPerClip;

}

function LateUpdate() {

       audio.clip = soundFire;

   if (muzzleFlash) {

      // We shot this frame, enable the muzzle flash

      if (m_LastFrameShot == Time.frameCount) {

         animation.CrossFade(«fire»);

         audio.clip = soundFire;

         audio.Play();

         muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);

         muzzleFlash.enabled = true;

      } else {

      // We didn't, disable the muzzle flash

         animation.CrossFade(«idle»);

         muzzleFlash.enabled = false;

         enabled = false;

      }

   }

}

function Fire () {

   if (bulletsLeft == 0)

      return;

   // If there is more than one bullet between the last and this frame

   // Reset the nextFireTime

   if (Time.time — fireRate > nextFireTime)

      nextFireTime = Time.time — Time.deltaTime;

   // Keep firing until we used up the fire time

   while( nextFireTime < Time.time && bulletsLeft != 0) {

      FireOneShot();

      nextFireTime += fireRate;

   }

}

function FireOneShot () {

   var direction = transform.TransformDirection(Vector3.forward);

   var hit: RaycastHit;

   // Did we hit anything?

   if (Physics.Raycast (transform.position, direction, hit, range)) {

      // Apply a force to the rigidbody we hit

      if (hit.rigidbody)

         hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

      // Place the particle system for spawing out of place where we hit the surface!

      // And spawn a couple of particles

      if (hitParticles) {

         hitParticles.transform.position = hit.point;

         hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);

         hitParticles.Emit();

      }

      // Send a damage message to the hit object         

      hit.collider.SendMessageUpwards(«ApplyDamage», damage, SendMessageOptions.DontRequireReceiver);

   }

   bulletsLeft--;

   // Register that we shot this frame,

   // so that the LateUpdate function enabled the muzzleflash renderer for one frame

   m_LastFrameShot = Time.frameCount;

   enabled = true;

   // Reload gun in reload Time   

    if (Input.GetButton («reload»))

       Reload();

   if (bulletsLeft == 0)

      Reload();

   }

function Reload () {

     // Wait for reload time first — then add more bullets!

        yield WaitForSeconds(waitTime);

       animation.CrossFade(«reload»);

       yield WaitForSeconds(waitTime);

       audio.clip = soundReload;

       audio.Play();

       yield WaitForSeconds(reloadTime);

        animation.CrossFade(«idle»);

   // We have a clip left reload

   if (clips > 0) {

      clips--;

      bulletsLeft = bulletsPerClip;

   }

}

function GetBulletsLeft () {

   return bulletsLeft;

}

ARTZINE 1 год назад #

var speed = 10.0;

var jumpSpeed = 8.0;

var gravity = 20.0;

var runSpeed = 2.0;

var sitSpeed = 0.3;

private var moveDirection = Vector3.zero;

private var grounded: boolean = false;

function FixedUpdate() {

   if (grounded) {

      // We are grounded, so recalculate movedirection directly from axes

      moveDirection = new Vector3(Input.GetAxis(«Horizontal»), 0, Input.GetAxis(«Vertical»));

      moveDirection = transform.TransformDirection(moveDirection);

      moveDirection *= speed;

   if (Input.GetButton («Jump»)) {

         moveDirection.y = jumpSpeed;

         transform.localScale.y = 1;

      }   

    if (Input.GetButton («run»)) {

         moveDirection *= runSpeed;

         transform.localPosition.y = 2.1;

         transform.localScale.y = 1;

         }

   if (Input.GetButton («sit»)) {

         transform.localScale.y = 0.5;

         moveDirection *= sitSpeed;

         }

   }

   // Apply gravity

   moveDirection.y -= gravity * Time.deltaTime;

   // Move the controller

   var controller: CharacterController = GetComponent(CharacterController);

   var flags = controller.Move(moveDirection * Time.deltaTime);

   grounded = (flags & CollisionFlags.CollidedBelow) != 0;

}

@script RequireComponent(CharacterController)

ARTZINE 1 год назад #

Здесь все аналогично transform.position. Кроме одного, несмотря на то, что в редакторе Unity3D Rotation представляет собой Vector3, то есть вращение относительно оси X, оси Y, оси Z. Но в коде оно представлено в виде кватернионов. 

ARTZINE 1 год назад #

Вращение объекта

За вращение объекта отвечает компонент transform.rotation, transform.localRotation и функция transform.Rotate.

ARTZINE 1 год назад #

int speed = 5;

void Start()

transform.position += new Vector3(speed,0,0)*Time.deltaTime;//движение по оси х с заданием параметра(скорости) через переменную speed

transform.position += new Vector3(1,0,1)*speed*Time.deltaTime;// движение по заданным осям со скоростью установленной переменной speed

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.