Добро пожаловать на сайт "Game Creating CommUnity"
Здравствуйте, уважаемый пользователь!

Возможно, вы впервые на этом сайте и мы очень надеемся, что вам у нас понравится. Администрация сайта сделает всё возможное, чтобы ваше пребывание на сайте было максимально комфортным. Спасибо за внимание!

P.S. Данное окно вас больше не потревожит
Готовые скрипты и функции - Форум Игроделов
Сб, 05 Июл 2025, 10:34 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Готовые скрипты и функции
gforcerДата: Пт, 09 Окт 2009, 14:39 | Сообщение # 1
 
Сообщений: 134
Награды: 0
Репутация: 80
Статус: Offline
Вот скрипт примитивного движения:

Code
 

 
var speed = 6.0;
 
var jumpSpeed = 8.0;
 
var gravity = 20.0;

 
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;
     
}
   
}

   
// 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)

 


FPSWalker.js из стандартного пакета.





Сообщение отредактировал Dekterev - Сб, 03 Дек 2011, 23:28
 
СообщениеВот скрипт примитивного движения:

Code
 

 
var speed = 6.0;
 
var jumpSpeed = 8.0;
 
var gravity = 20.0;

 
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;
     
}
   
}

   
// 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)

 


FPSWalker.js из стандартного пакета.

Автор - gforcer
Дата добавления - 09 Окт 2009 в 14:39
ZaichegДата: Пт, 09 Окт 2009, 19:21 | Сообщение # 2
 
Сообщений: 20
Награды: 0
Репутация: 12
Статус: Offline
Поясню, что код в первом посте — FPSWalker.js из стандартного пакета.
Я тут, кстати, для мелких нужд его на C# переписывал. Выкладываю код — может так кому проще будет въехать в разницу между JS и C#. Там ещё по мелочи добавлено, но всё с комментами — не потеряетесь.
На scriptCharacterStatus и stamina не обращайте внимания — это я в соседний скрипт информацию передаю.
Code
// передвижение персонажа

 
using UnityEngine;
 
using System.Collections;

 
[RequireComponent (typeof(CharacterController))]
 
public class CharacterWalker : MonoBehaviour    
 
{
   
public float currentSpeed = 6.0f; // рабочая скорость. Дальше скорости — бег, ходьба, приседание
   
public float runSpeed = 15.0f;
   
public float walkSpeed = 6.0f;
   
public float crouchSpeed = 2.5f;
   
public float jumpHeight = 8.0f; // высота прыжка
   
public float gravityPower = 20.0f; // скорость свободного падения
   
public Vector3 moveDirection = new Vector3(0, 0, 0); // направление движения
   
bool allowJump = true; //возможность прыжка
       
   
float FPCCameraPositionY = 0f; // позиция камеры, нужна для приседаний
   
float FPCCameraPositionX = 0f;
   
float FPCCameraPositionZ = 0f;
   
float conrollerHeight = 0f; // размер и позиция контроллера, нужно для приседаний
   
float conrollerRadius = 0f;
   
float FPCPositionY = 0f;
       
   
CharacterStatus scriptCharacterStatus;
   
CharacterController controllerC;
   
GameObject FPCCamera;

   
void Awake()
   
{
     controllerC
= GetComponent(typeof(CharacterController)) as CharacterController;
     scriptCharacterStatus
= GetComponent(typeof(CharacterStatus)) as CharacterStatus;    
       
     
// гравитация будет симулироваться иным способом. freezeRotation — нам не нужно, чтобы персонаж падал от любого столкновения
     rigidbody
.freezeRotation = true;
     rigidbody
.useGravity = false;
       
     
// инициализируем пространственные свойства камеры и персонажа
     
FPCCamera = GameObject.Find ("Main Camera");    
     
FPCCameraPositionY = FPCCamera.transform.localPosition.y;    
     
FPCCameraPositionX = FPCCamera.transform.localPosition.x;    
     
FPCCameraPositionZ = FPCCamera.transform.localPosition.z;    
     conrollerHeight
= controllerC.height;    
     conrollerRadius
= controllerC.radius;    
   
}
       
   
void Update()
   
{
     
if (controllerC.isGrounded) // если персонаж стоит на земле
     
{
     
// определяем вектор движения, исходя из ввода с осей
      moveDirection
= new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));    
      moveDirection
= transform.TransformDirection(moveDirection);    
      moveDirection
*= currentSpeed;    
         
     
// прыжок — просто поднимаем объект
     
if (Input.GetButton("Jump") && allowJump == true)    
     
{
       moveDirection
.y = jumpHeight;    
     
}
       
     
// приседание. Уменьшаем высоту контроллера, опускаем камеру, уменьшаем скорость, запрещаем прыжок
     
if (Input.GetKey("left ctrl"))    
     
{
       
FPCCamera.transform.localPosition = new Vector3 (FPCCameraPositionX, FPCCameraPositionY / 2, FPCCameraPositionZ + 0.1f);    
       controllerC
.height = conrollerHeight / 2;
       controllerC
.radius = conrollerRadius * 1.2f;
       
FPCPositionY = transform.position.y;    
       allowJump
= false;    
       currentSpeed
= crouchSpeed;    
     
}
     
// возвращаем всё обратно
     
if (Input.GetKeyUp("left ctrl"))    
     
{
       
FPCCamera.transform.localPosition = new Vector3 (FPCCameraPositionX, FPCCameraPositionY, FPCCameraPositionZ);    
       transform
.position = new Vector3(transform.position.x, FPCPositionY + 0.6f, transform.position.z);    
       controllerC
.height = conrollerHeight;
       controllerC
.radius = conrollerRadius;
       allowJump
= true;    
       currentSpeed
= walkSpeed;    
     
}
         
     
// бег — увеличиваем скорость, отправляем сообщения о накоплении усталости в CharacterStatus. Условие — наличие очков энергии.
     
if (Input.GetKey("left shift"))    
     
{
       
if (scriptCharacterStatus.stamina > 0f)    
       
{
        currentSpeed
= runSpeed;
        transform
.root.SendMessage("ApplyTiredness", 30 * Time.deltaTime);
       
}
       
if (scriptCharacterStatus.stamina < 0f & scriptCharacterStatus.stamina > -10f)
       
{
        currentSpeed
= walkSpeed;
        transform
.root.SendMessage("ApplyTiredness", 30 * Time.deltaTime);
       
}
     
}
     
if (Input.GetKeyUp("left shift"))
     
{
       currentSpeed
= walkSpeed;
     
}
     
}
       
     moveDirection
.y -= gravityPower * Time.deltaTime;  // применяем гравитацию
     controllerC
.Move(moveDirection * Time.deltaTime); // применяем движение
   
}
 
}
 
СообщениеПоясню, что код в первом посте — FPSWalker.js из стандартного пакета.
Я тут, кстати, для мелких нужд его на C# переписывал. Выкладываю код — может так кому проще будет въехать в разницу между JS и C#. Там ещё по мелочи добавлено, но всё с комментами — не потеряетесь.
На scriptCharacterStatus и stamina не обращайте внимания — это я в соседний скрипт информацию передаю.
Code
// передвижение персонажа

 
using UnityEngine;
 
using System.Collections;

 
[RequireComponent (typeof(CharacterController))]
 
public class CharacterWalker : MonoBehaviour    
 
{
   
public float currentSpeed = 6.0f; // рабочая скорость. Дальше скорости — бег, ходьба, приседание
   
public float runSpeed = 15.0f;
   
public float walkSpeed = 6.0f;
   
public float crouchSpeed = 2.5f;
   
public float jumpHeight = 8.0f; // высота прыжка
   
public float gravityPower = 20.0f; // скорость свободного падения
   
public Vector3 moveDirection = new Vector3(0, 0, 0); // направление движения
   
bool allowJump = true; //возможность прыжка
       
   
float FPCCameraPositionY = 0f; // позиция камеры, нужна для приседаний
   
float FPCCameraPositionX = 0f;
   
float FPCCameraPositionZ = 0f;
   
float conrollerHeight = 0f; // размер и позиция контроллера, нужно для приседаний
   
float conrollerRadius = 0f;
   
float FPCPositionY = 0f;
       
   
CharacterStatus scriptCharacterStatus;
   
CharacterController controllerC;
   
GameObject FPCCamera;

   
void Awake()
   
{
     controllerC
= GetComponent(typeof(CharacterController)) as CharacterController;
     scriptCharacterStatus
= GetComponent(typeof(CharacterStatus)) as CharacterStatus;    
       
     
// гравитация будет симулироваться иным способом. freezeRotation — нам не нужно, чтобы персонаж падал от любого столкновения
     rigidbody
.freezeRotation = true;
     rigidbody
.useGravity = false;
       
     
// инициализируем пространственные свойства камеры и персонажа
     
FPCCamera = GameObject.Find ("Main Camera");    
     
FPCCameraPositionY = FPCCamera.transform.localPosition.y;    
     
FPCCameraPositionX = FPCCamera.transform.localPosition.x;    
     
FPCCameraPositionZ = FPCCamera.transform.localPosition.z;    
     conrollerHeight
= controllerC.height;    
     conrollerRadius
= controllerC.radius;    
   
}
       
   
void Update()
   
{
     
if (controllerC.isGrounded) // если персонаж стоит на земле
     
{
     
// определяем вектор движения, исходя из ввода с осей
      moveDirection
= new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));    
      moveDirection
= transform.TransformDirection(moveDirection);    
      moveDirection
*= currentSpeed;    
         
     
// прыжок — просто поднимаем объект
     
if (Input.GetButton("Jump") && allowJump == true)    
     
{
       moveDirection
.y = jumpHeight;    
     
}
       
     
// приседание. Уменьшаем высоту контроллера, опускаем камеру, уменьшаем скорость, запрещаем прыжок
     
if (Input.GetKey("left ctrl"))    
     
{
       
FPCCamera.transform.localPosition = new Vector3 (FPCCameraPositionX, FPCCameraPositionY / 2, FPCCameraPositionZ + 0.1f);    
       controllerC
.height = conrollerHeight / 2;
       controllerC
.radius = conrollerRadius * 1.2f;
       
FPCPositionY = transform.position.y;    
       allowJump
= false;    
       currentSpeed
= crouchSpeed;    
     
}
     
// возвращаем всё обратно
     
if (Input.GetKeyUp("left ctrl"))    
     
{
       
FPCCamera.transform.localPosition = new Vector3 (FPCCameraPositionX, FPCCameraPositionY, FPCCameraPositionZ);    
       transform
.position = new Vector3(transform.position.x, FPCPositionY + 0.6f, transform.position.z);    
       controllerC
.height = conrollerHeight;
       controllerC
.radius = conrollerRadius;
       allowJump
= true;    
       currentSpeed
= walkSpeed;    
     
}
         
     
// бег — увеличиваем скорость, отправляем сообщения о накоплении усталости в CharacterStatus. Условие — наличие очков энергии.
     
if (Input.GetKey("left shift"))    
     
{
       
if (scriptCharacterStatus.stamina > 0f)    
       
{
        currentSpeed
= runSpeed;
        transform
.root.SendMessage("ApplyTiredness", 30 * Time.deltaTime);
       
}
       
if (scriptCharacterStatus.stamina < 0f & scriptCharacterStatus.stamina > -10f)
       
{
        currentSpeed
= walkSpeed;
        transform
.root.SendMessage("ApplyTiredness", 30 * Time.deltaTime);
       
}
     
}
     
if (Input.GetKeyUp("left shift"))
     
{
       currentSpeed
= walkSpeed;
     
}
     
}
       
     moveDirection
.y -= gravityPower * Time.deltaTime;  // применяем гравитацию
     controllerC
.Move(moveDirection * Time.deltaTime); // применяем движение
   
}
 
}

Автор - Zaicheg
Дата добавления - 09 Окт 2009 в 19:21
proektEKДата: Пн, 30 Авг 2010, 22:14 | Сообщение # 3
 
Сообщений: 493
Награды: 6
Репутация: 193
Статус: Offline
Нашел скрипт, вращает и перемещает текстуру, может служить для создания миникарты.
Code
using UnityEngine;
 
using System.Collections;

 
public class RotateArrowScript : MonoBehaviour {
             
public float angle;
             
public Rect mainRect;
             
public Texture guiTextur;
         
Vector3 centerRotateOfGUI;//center point of Rotate
                 
             
void Start(){
             centerRotateOfGUI
= new Vector2(mainRect.x + mainRect.width / 2, mainRect.y + mainRect.height / 2);
             
}
             
             
void OnGUI(){
             
Matrix4x4 iniMatrix = GUI.matrix;
             
GUIUtility.RotateAroundPivot(angle, centerRotateOfGUI);//Change GUI matrix
             GUI
.DrawTexture(mainRect, guiTextur);
           
///There restore the initial GUI.matrix for future elements from iniMatrix;
             GUI
.matrix = iniMatrix;        
             
}
 
}


Сообщение отредактировал proektEK - Пт, 20 Авг 2010, 20:49
 
СообщениеНашел скрипт, вращает и перемещает текстуру, может служить для создания миникарты.
Code
using UnityEngine;
 
using System.Collections;

 
public class RotateArrowScript : MonoBehaviour {
             
public float angle;
             
public Rect mainRect;
             
public Texture guiTextur;
         
Vector3 centerRotateOfGUI;//center point of Rotate
                 
             
void Start(){
             centerRotateOfGUI
= new Vector2(mainRect.x + mainRect.width / 2, mainRect.y + mainRect.height / 2);
             
}
             
             
void OnGUI(){
             
Matrix4x4 iniMatrix = GUI.matrix;
             
GUIUtility.RotateAroundPivot(angle, centerRotateOfGUI);//Change GUI matrix
             GUI
.DrawTexture(mainRect, guiTextur);
           
///There restore the initial GUI.matrix for future elements from iniMatrix;
             GUI
.matrix = iniMatrix;        
             
}
 
}

Автор - proektEK
Дата добавления - 30 Авг 2010 в 22:14
ЛевшаДата: Чт, 19 Янв 2012, 03:58 | Сообщение # 4
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Скрипт автоматической двери:

Code
var animOpen : AnimationClip;
 
var animClose : AnimationClip;
 
var soundOpen : AudioClip;
 
var soundClose : AudioClip;
 
private var open = 1;
 
private var close = 0;

 
function OnTriggerEnter (other : Collider) {
         
if (open == 1)  {
         open
= 0;
           
Open ();
         
}
 
}

 
function OnTriggerExit (other : Collider) {
         
if (close == 1)  {
         close
= 0;
         
Close ();
         
}
 
}
 
function Open ()  {
         audio
.clip = soundOpen;
         audio
.Play();
         animation
.clip = animOpen;
         animation
.Play();
         
yield WaitForSeconds (animation.clip.length);
         close
= 1;
 
}
 
function Close ()  {
         audio
.clip = soundClose;
         audio
.Play();
         animation
.clip = animClose;
         animation
.Play();
         
yield WaitForSeconds (animation.clip.length);
         open
= 1;
 
}




Скрипт вешам на обьект с компонентом анимации.
Коллайдер обьекта ставим как на рисунке.
Коллайдеру галочку на isTrigger.


Скрипт анимированной деколи:

Code
var frames : Texture[];
 
private var index = 0;

 
function FixedUpdate () {
          renderer
.material.mainTexture = frames[index];
   
if (index < frames.Length - 1)
          index
+= 1;
     
else index = 0;    
 
}


В переменной Frames устанавливаем кол-во кадров и перетаскиваем в нее картинки в порядке последовательности.


X.cor.R (Prologue)
 
СообщениеСкрипт автоматической двери:

Code
var animOpen : AnimationClip;
 
var animClose : AnimationClip;
 
var soundOpen : AudioClip;
 
var soundClose : AudioClip;
 
private var open = 1;
 
private var close = 0;

 
function OnTriggerEnter (other : Collider) {
         
if (open == 1)  {
         open
= 0;
           
Open ();
         
}
 
}

 
function OnTriggerExit (other : Collider) {
         
if (close == 1)  {
         close
= 0;
         
Close ();
         
}
 
}
 
function Open ()  {
         audio
.clip = soundOpen;
         audio
.Play();
         animation
.clip = animOpen;
         animation
.Play();
         
yield WaitForSeconds (animation.clip.length);
         close
= 1;
 
}
 
function Close ()  {
         audio
.clip = soundClose;
         audio
.Play();
         animation
.clip = animClose;
         animation
.Play();
         
yield WaitForSeconds (animation.clip.length);
         open
= 1;
 
}




Скрипт вешам на обьект с компонентом анимации.
Коллайдер обьекта ставим как на рисунке.
Коллайдеру галочку на isTrigger.


Скрипт анимированной деколи:

Code
var frames : Texture[];
 
private var index = 0;

 
function FixedUpdate () {
          renderer
.material.mainTexture = frames[index];
   
if (index < frames.Length - 1)
          index
+= 1;
     
else index = 0;    
 
}


В переменной Frames устанавливаем кол-во кадров и перетаскиваем в нее картинки в порядке последовательности.

Автор - Левша
Дата добавления - 19 Янв 2012 в 03:58
dostalitionДата: Чт, 18 Апр 2013, 19:05 | Сообщение # 5
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Скрипт для перехода персонажа между уровнями с указанием точки появления и угла поворота в каждой сцене ...
Код
function Awake () {
     
DontDestroyOnLoad (transform.gameObject);
 
}
 
function OnLevelWasLoaded (level : int) {
     
if (level == 0){
     
Destroy(gameObject);
     
}
     
if (level == 2) {
         transform
.position = Vector3(2334.9,686.4,1833.3);
         transform
.rotation = Quaternion.Euler(0, 66, 0);
     
}
     
if (level == 3) {
         transform
.position = Vector3(29,3.4,42);
         transform
.rotation = Quaternion.Euler(0, 137, 0);
     
}
     
if (level == 4) {
         transform
.position = Vector3(26,2.3,48);
         transform
.rotation = Quaternion.Euler(0, 490, 0);
     
}
     
if (level == 5) {
         transform
.position = Vector3(21,7,45);
         transform
.rotation = Quaternion.Euler(0, 0, 0);
     
}
 
}

Добавлено (18.04.2013, 19:05)
---------------------------------------------
Скрипт отключения/включения курсора по нажатию ESC

Код
#pragma strict

 
var esc: boolean;

 
function Start () {

 
Screen.showCursor = false;
 
Screen.lockCursor = true;
 
}

 
function Update () {

 
if(Input.GetKeyDown("escape") && !esc){
   esc
= true;
   
Screen.showCursor = true;
   
Screen.lockCursor = false;
   
GameObject.Find("IGROK").GetComponent(MouseLook).enabled = false;  
   
GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = false;
   
}  
 
else if (Input.GetKeyDown("escape") && esc){
   esc
= false;
   
Screen.showCursor = false;
   
Screen.lockCursor = true;
   
GameObject.Find("IGROK").GetComponent(MouseLook).enabled = true;  
   
GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = true;
   
}

 
}

 
 
СообщениеСкрипт для перехода персонажа между уровнями с указанием точки появления и угла поворота в каждой сцене ...
Код
function Awake () {
     
DontDestroyOnLoad (transform.gameObject);
 
}
 
function OnLevelWasLoaded (level : int) {
     
if (level == 0){
     
Destroy(gameObject);
     
}
     
if (level == 2) {
         transform
.position = Vector3(2334.9,686.4,1833.3);
         transform
.rotation = Quaternion.Euler(0, 66, 0);
     
}
     
if (level == 3) {
         transform
.position = Vector3(29,3.4,42);
         transform
.rotation = Quaternion.Euler(0, 137, 0);
     
}
     
if (level == 4) {
         transform
.position = Vector3(26,2.3,48);
         transform
.rotation = Quaternion.Euler(0, 490, 0);
     
}
     
if (level == 5) {
         transform
.position = Vector3(21,7,45);
         transform
.rotation = Quaternion.Euler(0, 0, 0);
     
}
 
}

Добавлено (18.04.2013, 19:05)
---------------------------------------------
Скрипт отключения/включения курсора по нажатию ESC

Код
#pragma strict

 
var esc: boolean;

 
function Start () {

 
Screen.showCursor = false;
 
Screen.lockCursor = true;
 
}

 
function Update () {

 
if(Input.GetKeyDown("escape") && !esc){
   esc
= true;
   
Screen.showCursor = true;
   
Screen.lockCursor = false;
   
GameObject.Find("IGROK").GetComponent(MouseLook).enabled = false;  
   
GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = false;
   
}  
 
else if (Input.GetKeyDown("escape") && esc){
   esc
= false;
   
Screen.showCursor = false;
   
Screen.lockCursor = true;
   
GameObject.Find("IGROK").GetComponent(MouseLook).enabled = true;  
   
GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = true;
   
}

 
}

 

Автор - dostalition
Дата добавления - 18 Апр 2013 в 19:05
VolkOrievithДата: Чт, 25 Июл 2013, 11:15 | Сообщение # 6
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Что - то вроде TankTrackController из танк туториала, только более уравновешеный, и со звуком (На JS написал с нуля)
Инструкция по переменным в самом скрипте. Некоторые значения уже проставлены. Экспериментируйте.
Код
 
 
var WheelsR : GameObject[]; // правые кости для гусиници
 
var WheelsL : GameObject[]; // левые кости для гусиници
 
var DummysR : WheelCollider[]; // пр. колеса
 
var DummysL : WheelCollider[]; // лев. колеса
 
var WheelRadius = 0.0;
 
var WheelStPos = 0.0; // настройте сами(поездите, и поймете, что это)
 
var WheelH = 0.0; // тоже настройте сами
 
var Axeleration = 30.0;
 
var MultAx = 40.0;
 
var RotationAxel = 12.0;
 
var BackwardBrT = 1.0; // троможение, при заднем ходе
 
var COM : Vector3; // это прибавляется к Центру массы
 
var Drag = 2.5;
 
var BDrag = 10.0;
 
private var DragP = 0.0;
 
private var RAxel = 0.0;
 
private var LAxel = 0.0;
 
var BreakForce = 40.0;
 
var TextureMuvingSpeed = 0.7;
 
var TextureRigidbodyMyltiply = 0.2;
 
var TexMuvingAxis : TMAxis; // Ось движения текстуры
 
enum TMAxis {
 x
= 0,
 y
= 1
 
}
 
var TrackR : GameObject; // пр. трак
 
var TrackL : GameObject; // лев. трак
 
private var RAxelp = 0.0;
 
private var LAxelp = 0.0;
 
var RSound : GameObject; // Звук пр. колес
 
var LSound : GameObject; // Звук лев. колес
 
var Sound1 = 0.8;
 
var Sound2 = 60.0;

 
function Start () {
 rigidbody
.centerOfMass += COM;
 
}

 
function Update () {
 
DummyPosition ();
 
Axel ();
 
}
 
function DummyPosition (){
 
var GrHit : RaycastHit;
 
var WhileNo = 0;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
}

 
function Axel (){
 
RAxel = Mathf.Lerp(RAxel, (Input.GetAxis("Vertical") * Axeleration) - ((Input.GetAxis("Horizontal") - (RAxelp / 2)) * RotationAxel), Time.deltaTime * MultAx);
 
LAxel = Mathf.Lerp(LAxel, (Input.GetAxis("Vertical") * Axeleration) + ((Input.GetAxis("Horizontal") - (LAxelp / 2)) * RotationAxel), Time.deltaTime * MultAx);
 
RAxelp = Mathf.Lerp(RAxelp, (Input.GetAxis("Horizontal")), Time.deltaTime);
 
LAxelp = Mathf.Lerp(LAxelp, (Input.GetAxis("Horizontal")), Time.deltaTime);
 
if (Input.GetAxis("Vertical") < 0){
 
DragP = BDrag;
 
}else
 
DragP = Drag;
 
for (var Hit : WheelCollider in DummysR){
 
if (!Hit)
 
continue;
 
Hit.motorTorque = RAxel - (rigidbody.velocity.magnitude / DragP);
 
Hit.sidewaysFriction.stiffness = 0.11 - Mathf.Abs( RAxelp / 10);
 
if (!Input.GetButton("Horizontal") && !Input.GetButton("Vertical"))
 
Hit.brakeTorque = BreakForce;
 
else
 
Hit.brakeTorque = 0;
 
if (Input.GetAxis("Vertical") < 0)
 
Hit.brakeTorque = rigidbody.velocity.magnitude * BackwardBrT;
 
}
 
if (TexMuvingAxis == 0){
 
TrackR.renderer.material.mainTextureOffset.x += Time.deltaTime * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackR.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (-Time.time * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply), 0.0));
 
TrackL.renderer.material.mainTextureOffset.x += Time.deltaTime * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackL.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (-Time.time * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply), 0.0));
 
}else{
 
TrackR.renderer.material.mainTextureOffset.y += Time.deltaTime * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackR.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (0.0, -Time.time * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply)));
 
TrackL.renderer.material.mainTextureOffset.y += Time.deltaTime * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackL.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (0.0, -Time.time * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply)));
 
}
 
for (var Hit2 : WheelCollider in DummysL){
 
if (!Hit2)
 
continue;
 
Hit2.motorTorque = LAxel - (rigidbody.velocity.magnitude / DragP);
 
Hit2.sidewaysFriction.stiffness = 0.11 - Mathf.Abs( LAxelp / 10);
 
if (!Input.GetButton("Horizontal") && !Input.GetButton("Vertical"))
 
Hit2.brakeTorque = BreakForce;
 
else
 
Hit2.brakeTorque = 0;
 
if (Input.GetAxis("Vertical") < 0)
 
Hit2.brakeTorque = rigidbody.velocity.magnitude * BackwardBrT;
 
}
 
RSound.audio.pitch = Mathf.Lerp(RSound.audio.pitch,Sound1 + (RAxel / Sound2), Time.deltaTime * 2);
 
LSound.audio.pitch = Mathf.Lerp(LSound.audio.pitch,Sound1 + (LAxel / Sound2), Time.deltaTime * 2);
 
}

Я так думаю, что эта тема не для вопросов, так что вопросы в личку.
 
СообщениеЧто - то вроде TankTrackController из танк туториала, только более уравновешеный, и со звуком (На JS написал с нуля)
Инструкция по переменным в самом скрипте. Некоторые значения уже проставлены. Экспериментируйте.
Код
 
 
var WheelsR : GameObject[]; // правые кости для гусиници
 
var WheelsL : GameObject[]; // левые кости для гусиници
 
var DummysR : WheelCollider[]; // пр. колеса
 
var DummysL : WheelCollider[]; // лев. колеса
 
var WheelRadius = 0.0;
 
var WheelStPos = 0.0; // настройте сами(поездите, и поймете, что это)
 
var WheelH = 0.0; // тоже настройте сами
 
var Axeleration = 30.0;
 
var MultAx = 40.0;
 
var RotationAxel = 12.0;
 
var BackwardBrT = 1.0; // троможение, при заднем ходе
 
var COM : Vector3; // это прибавляется к Центру массы
 
var Drag = 2.5;
 
var BDrag = 10.0;
 
private var DragP = 0.0;
 
private var RAxel = 0.0;
 
private var LAxel = 0.0;
 
var BreakForce = 40.0;
 
var TextureMuvingSpeed = 0.7;
 
var TextureRigidbodyMyltiply = 0.2;
 
var TexMuvingAxis : TMAxis; // Ось движения текстуры
 
enum TMAxis {
 x
= 0,
 y
= 1
 
}
 
var TrackR : GameObject; // пр. трак
 
var TrackL : GameObject; // лев. трак
 
private var RAxelp = 0.0;
 
private var LAxelp = 0.0;
 
var RSound : GameObject; // Звук пр. колес
 
var LSound : GameObject; // Звук лев. колес
 
var Sound1 = 0.8;
 
var Sound2 = 60.0;

 
function Start () {
 rigidbody
.centerOfMass += COM;
 
}

 
function Update () {
 
DummyPosition ();
 
Axel ();
 
}
 
function DummyPosition (){
 
var GrHit : RaycastHit;
 
var WhileNo = 0;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
if (WhileNo != WheelsL.Length){
 
WhileNo += 1;
 
if (DummysR[WhileNo].isGrounded){
 
Physics.Raycast(DummysR[WhileNo].transform.position, -DummysR[WhileNo].transform.up, GrHit);
 
WheelsR[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsR[WhileNo].transform.position = DummysR[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
if (DummysL[WhileNo].isGrounded){
 
Physics.Raycast(DummysL[WhileNo].transform.position, -DummysL[WhileNo].transform.up, GrHit);
 
WheelsL[WhileNo].transform.position = GrHit.point + transform.TransformDirection(Vector3(WheelH,WheelRadius,0));
 
}else
 
WheelsL[WhileNo].transform.position = DummysL[WhileNo].transform.position + transform.TransformDirection(Vector3(WheelH,WheelStPos,0));
 
}
 
}

 
function Axel (){
 
RAxel = Mathf.Lerp(RAxel, (Input.GetAxis("Vertical") * Axeleration) - ((Input.GetAxis("Horizontal") - (RAxelp / 2)) * RotationAxel), Time.deltaTime * MultAx);
 
LAxel = Mathf.Lerp(LAxel, (Input.GetAxis("Vertical") * Axeleration) + ((Input.GetAxis("Horizontal") - (LAxelp / 2)) * RotationAxel), Time.deltaTime * MultAx);
 
RAxelp = Mathf.Lerp(RAxelp, (Input.GetAxis("Horizontal")), Time.deltaTime);
 
LAxelp = Mathf.Lerp(LAxelp, (Input.GetAxis("Horizontal")), Time.deltaTime);
 
if (Input.GetAxis("Vertical") < 0){
 
DragP = BDrag;
 
}else
 
DragP = Drag;
 
for (var Hit : WheelCollider in DummysR){
 
if (!Hit)
 
continue;
 
Hit.motorTorque = RAxel - (rigidbody.velocity.magnitude / DragP);
 
Hit.sidewaysFriction.stiffness = 0.11 - Mathf.Abs( RAxelp / 10);
 
if (!Input.GetButton("Horizontal") && !Input.GetButton("Vertical"))
 
Hit.brakeTorque = BreakForce;
 
else
 
Hit.brakeTorque = 0;
 
if (Input.GetAxis("Vertical") < 0)
 
Hit.brakeTorque = rigidbody.velocity.magnitude * BackwardBrT;
 
}
 
if (TexMuvingAxis == 0){
 
TrackR.renderer.material.mainTextureOffset.x += Time.deltaTime * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackR.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (-Time.time * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply), 0.0));
 
TrackL.renderer.material.mainTextureOffset.x += Time.deltaTime * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackL.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (-Time.time * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply), 0.0));
 
}else{
 
TrackR.renderer.material.mainTextureOffset.y += Time.deltaTime * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackR.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (0.0, -Time.time * TextureMuvingSpeed * RAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply)));
 
TrackL.renderer.material.mainTextureOffset.y += Time.deltaTime * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply);
 
TrackL.renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (0.0, -Time.time * TextureMuvingSpeed * LAxel + (rigidbody.velocity.magnitude * TextureRigidbodyMyltiply)));
 
}
 
for (var Hit2 : WheelCollider in DummysL){
 
if (!Hit2)
 
continue;
 
Hit2.motorTorque = LAxel - (rigidbody.velocity.magnitude / DragP);
 
Hit2.sidewaysFriction.stiffness = 0.11 - Mathf.Abs( LAxelp / 10);
 
if (!Input.GetButton("Horizontal") && !Input.GetButton("Vertical"))
 
Hit2.brakeTorque = BreakForce;
 
else
 
Hit2.brakeTorque = 0;
 
if (Input.GetAxis("Vertical") < 0)
 
Hit2.brakeTorque = rigidbody.velocity.magnitude * BackwardBrT;
 
}
 
RSound.audio.pitch = Mathf.Lerp(RSound.audio.pitch,Sound1 + (RAxel / Sound2), Time.deltaTime * 2);
 
LSound.audio.pitch = Mathf.Lerp(LSound.audio.pitch,Sound1 + (LAxel / Sound2), Time.deltaTime * 2);
 
}

Я так думаю, что эта тема не для вопросов, так что вопросы в личку.

Автор - VolkOrievith
Дата добавления - 25 Июл 2013 в 11:15
Igor_TynerДата: Чт, 28 Ноя 2013, 18:07 | Сообщение # 7
Нет аватара
 
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline
База для создания функции плавания в воде. Еще нужно много чего добавить.. Но может кому и пригодится
Код
using UnityEngine;
 
using System.Collections;

 
public class Test1 : MonoBehaviour {
 
public CharacterController player;
 
public bool isTriger;
 
// Use this for initialization
 
void Start () {
  isTriger
=false;
 
}
   
 
// Update is called once per frame
 
void Update ()  
 
{
   
if(Input.GetKeyDown(KeyCode.LeftShift))
   
{
    player
.GetComponent<CharacterMotor>().movement.maxForwardSpeed=90;
   
}
   
else  
   
{
   
if(Input.GetKeyUp(KeyCode.LeftShift))
   
{
     player
.GetComponent<CharacterMotor>().movement.maxForwardSpeed=6;
   
}
   
}  
   
   
if(isTriger)
   
{
    player
.GetComponent<CharacterMotor>().movement.gravity=5;
   
if(Input.GetKey(KeyCode.Space))
   
{
     player
.transform.position=new Vector3(player.transform.position.x,player.transform.position.y+0.5f,player.transform.position.z);
     player
.GetComponent<CharacterMotor>().movement.maxFallSpeed=3;
   
}
     
   
}
     
 
}
   
 
void OnTriggerEnter(Collider other)
 
{
   
if(other.tag =="water" && isTriger==false)
   
{
    isTriger
=true;
   
}  
 
}
   
 
void OnTriggerExit(Collider other)
 
{
   
if(other.tag =="water" && isTriger==true)
   
{
    isTriger
=false;
   
}  
 
}
   
   
 
}
 
 
СообщениеБаза для создания функции плавания в воде. Еще нужно много чего добавить.. Но может кому и пригодится
Код
using UnityEngine;
 
using System.Collections;

 
public class Test1 : MonoBehaviour {
 
public CharacterController player;
 
public bool isTriger;
 
// Use this for initialization
 
void Start () {
  isTriger
=false;
 
}
   
 
// Update is called once per frame
 
void Update ()  
 
{
   
if(Input.GetKeyDown(KeyCode.LeftShift))
   
{
    player
.GetComponent<CharacterMotor>().movement.maxForwardSpeed=90;
   
}
   
else  
   
{
   
if(Input.GetKeyUp(KeyCode.LeftShift))
   
{
     player
.GetComponent<CharacterMotor>().movement.maxForwardSpeed=6;
   
}
   
}  
   
   
if(isTriger)
   
{
    player
.GetComponent<CharacterMotor>().movement.gravity=5;
   
if(Input.GetKey(KeyCode.Space))
   
{
     player
.transform.position=new Vector3(player.transform.position.x,player.transform.position.y+0.5f,player.transform.position.z);
     player
.GetComponent<CharacterMotor>().movement.maxFallSpeed=3;
   
}
     
   
}
     
 
}
   
 
void OnTriggerEnter(Collider other)
 
{
   
if(other.tag =="water" && isTriger==false)
   
{
    isTriger
=true;
   
}  
 
}
   
 
void OnTriggerExit(Collider other)
 
{
   
if(other.tag =="water" && isTriger==true)
   
{
    isTriger
=false;
   
}  
 
}
   
   
 
}
 

Автор - Igor_Tyner
Дата добавления - 28 Ноя 2013 в 18:07
N0ratorДата: Сб, 28 Дек 2013, 14:24 | Сообщение # 8
 
Сообщений: 16
Награды: 0
Репутация: 1
Статус: Offline
2 скрипта:
1) Движение камеры прямо пропорциональное движению мыши(Как в MMORPG):


2) Движение игрока (как в MMORPG):


Маленькое примечание: Скрипты слегка взаимодействуют друг с другом - При нажатии на ПКМ поворот персонажа по X будет равняться углу поворота по X. камере.


Сообщение отредактировал N0rator - Сб, 28 Дек 2013, 18:31
 
Сообщение2 скрипта:
1) Движение камеры прямо пропорциональное движению мыши(Как в MMORPG):


2) Движение игрока (как в MMORPG):


Маленькое примечание: Скрипты слегка взаимодействуют друг с другом - При нажатии на ПКМ поворот персонажа по X будет равняться углу поворота по X. камере.

Автор - N0rator
Дата добавления - 28 Дек 2013 в 14:24
VolkOrievithДата: Вс, 06 Июл 2014, 12:49 | Сообщение # 9
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Переделывал скрипт SmoothFollow и вот что получил:

Код
var target : Transform;
 
var LookAt : Transform;
 
var distance = 10.0;
 
var height = 5.0;
 
var positionDamping = 5.0;

 
private var TargetedPosition : Vector3;

 
function FixedUpdate () {
 
if (!target)
   
return;
   
 
TargetedPosition = target.position+target.TransformDirection(Vector3(0,height,-distance));
  transform
.position = Vector3.Lerp(transform.position, TargetedPosition, Time.fixedDeltaTime*positionDamping);
   
  transform
.LookAt (LookAt);
 
}

Работает хорошо.
Я его использовал для камеры 3его лица над вертолетом. Камера смотрит на "var LookAt : Transform;" и следует за "var target : Transform;".
 
СообщениеПеределывал скрипт SmoothFollow и вот что получил:

Код
var target : Transform;
 
var LookAt : Transform;
 
var distance = 10.0;
 
var height = 5.0;
 
var positionDamping = 5.0;

 
private var TargetedPosition : Vector3;

 
function FixedUpdate () {
 
if (!target)
   
return;
   
 
TargetedPosition = target.position+target.TransformDirection(Vector3(0,height,-distance));
  transform
.position = Vector3.Lerp(transform.position, TargetedPosition, Time.fixedDeltaTime*positionDamping);
   
  transform
.LookAt (LookAt);
 
}

Работает хорошо.
Я его использовал для камеры 3его лица над вертолетом. Камера смотрит на "var LookAt : Transform;" и следует за "var target : Transform;".

Автор - VolkOrievith
Дата добавления - 06 Июл 2014 в 12:49
Thedrhax14Дата: Чт, 10 Июл 2014, 20:54 | Сообщение # 10
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Простой скрипт жизни перса, вешать прям на вашего персонажа, так же есть возможность редактировать расположения показателя жизней. Скрипт отвечает так и за снятие жизней ( function ApplyDamage) и наоборот ( function ApplyHealth).
Код
//Character's health
 
private var player_health_max : int = 100;
 
private var player_health_min : int = 0;
 
static var player_health : int = 100;
 
var PositionOfBoxX:int;
 
var PositionOfBoxY:int;
 
var player_death : boolean = false;  
 
var Player: GameObject;
 
var deadPlayer:GameObject;

 
function Update ()
 
{
 
if (player_health >= player_health_max)
 
{
 player_health
= player_health_max;
 
}
 
if (player_health <= player_health_min)
 
{
 player_death
= true;
 player_health
= player_health_min;
 
}
 
}

 
function ApplyDamage(Damage : float)
 
{
 player_health
-=Damage;
 
}

 
function ApplyHealth(HealthAmount:int)
 
{
 player_health
+= HealthAmount;
 
}

 
function OnGUI () {
 
if (player_death)
 
{
 
Instantiate(deadPlayer,transform.position,transform.rotation);
 
Destroy(Player);
 
}
 GUI
.Box (Rect (PositionOfBoxX, PositionOfBoxY, 300, 40), "Здоровье: "+ player_health);
 
}


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/

Сообщение отредактировал Thedrhax14 - Чт, 10 Июл 2014, 20:55
 
СообщениеПростой скрипт жизни перса, вешать прям на вашего персонажа, так же есть возможность редактировать расположения показателя жизней. Скрипт отвечает так и за снятие жизней ( function ApplyDamage) и наоборот ( function ApplyHealth).
Код
//Character's health
 
private var player_health_max : int = 100;
 
private var player_health_min : int = 0;
 
static var player_health : int = 100;
 
var PositionOfBoxX:int;
 
var PositionOfBoxY:int;
 
var player_death : boolean = false;  
 
var Player: GameObject;
 
var deadPlayer:GameObject;

 
function Update ()
 
{
 
if (player_health >= player_health_max)
 
{
 player_health
= player_health_max;
 
}
 
if (player_health <= player_health_min)
 
{
 player_death
= true;
 player_health
= player_health_min;
 
}
 
}

 
function ApplyDamage(Damage : float)
 
{
 player_health
-=Damage;
 
}

 
function ApplyHealth(HealthAmount:int)
 
{
 player_health
+= HealthAmount;
 
}

 
function OnGUI () {
 
if (player_death)
 
{
 
Instantiate(deadPlayer,transform.position,transform.rotation);
 
Destroy(Player);
 
}
 GUI
.Box (Rect (PositionOfBoxX, PositionOfBoxY, 300, 40), "Здоровье: "+ player_health);
 
}

Автор - Thedrhax14
Дата добавления - 10 Июл 2014 в 20:54
GenaДата: Сб, 15 Ноя 2014, 21:53 | Сообщение # 11
Нет аватара
 
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
Zaicheg, Ошибка:
 
СообщениеZaicheg, Ошибка:

Автор - Gena
Дата добавления - 15 Ноя 2014 в 21:53
СахарДата: Чт, 12 Мар 2015, 10:26 | Сообщение # 12
Нет аватара
 
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Скрипт фонарика.
Код
using UnityEngine;
 
using System.Collections;

 
public class Lantern : MonoBehaviour {

     
public Light lantern;
     
private bool lantern_off = true;  

     
void Start()
     
{
          lantern
.range = 0;
     
}

   
void Update () {

         
if(Input.GetKeyUp(KeyCode.L))
         
{
              lantern_off
= !lantern_off;
         
}

         
if (Input.GetKeyUp(KeyCode.L) && lantern_off == true)
         
{
              lantern
.range = 0;
         
}

         
else if (Input.GetKeyUp(KeyCode.L) && lantern_off == false)
         
{
              lantern
.range = 10;
         
}

         
if (lantern == null)
         
{
             
Debug.LogError("АХТУНГ!!! Отсутствует источник света");
         
}
     
   
}
 
}
 
СообщениеСкрипт фонарика.
Код
using UnityEngine;
 
using System.Collections;

 
public class Lantern : MonoBehaviour {

     
public Light lantern;
     
private bool lantern_off = true;  

     
void Start()
     
{
          lantern
.range = 0;
     
}

   
void Update () {

         
if(Input.GetKeyUp(KeyCode.L))
         
{
              lantern_off
= !lantern_off;
         
}

         
if (Input.GetKeyUp(KeyCode.L) && lantern_off == true)
         
{
              lantern
.range = 0;
         
}

         
else if (Input.GetKeyUp(KeyCode.L) && lantern_off == false)
         
{
              lantern
.range = 10;
         
}

         
if (lantern == null)
         
{
             
Debug.LogError("АХТУНГ!!! Отсутствует источник света");
         
}
     
   
}
 
}

Автор - Сахар
Дата добавления - 12 Мар 2015 в 10:26
chapaeffДата: Чт, 18 Фев 2016, 23:47 | Сообщение # 13
 
Сообщений: 48
Награды: 0
Репутация: 12
Статус: Offline
Цитата Сахар ()
Скрипт фонарика.


1. Выключать фонарик через изменение Range - ужс.
2. если фонарик - нулл, то можно было уже добавлять новый


---------------------------------------------------------------------------------------
Throw Exception
(ノಠ益ಠ)ノ彡┻━┻
Catch Exception
┬──┬ ノ( ゜-゜ノ)
 
Сообщение
Цитата Сахар ()
Скрипт фонарика.


1. Выключать фонарик через изменение Range - ужс.
2. если фонарик - нулл, то можно было уже добавлять новый

Автор - chapaeff
Дата добавления - 18 Фев 2016 в 23:47
RealGamesWorldДата: Пт, 16 Мар 2018, 17:16 | Сообщение # 14
Карто-строитель
 
Сообщений: 190
Награды: 2
Репутация: 70
Статус: Offline
Делал для своего проекта.. Простой скриптик. C#
Что то типо LOD.. При определенном расстоянии обьекты выключаются со сцены и убирают нагрузку.

Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LOD : MonoBehaviour {
   
public float distLOD;
   
public GameObject CameraLOD;
   
public GameObject ObjectLOD;
   
public float RadiusLOD = 50;
   
// Use this for initialization
   
void Start () {
 
   
}
   
   
// Update is called once per frame
   
void Update () {
  distLOD
= Vector3.Distance (CameraLOD.transform.position, transform.position);
 
if (distLOD >= RadiusLOD) {
   
ObjectLOD.SetActive(false);
 
}
 
if (distLOD <= RadiusLOD) {
   
ObjectLOD.SetActive(true);
 
}
   
}
}
 
СообщениеДелал для своего проекта.. Простой скриптик. C#
Что то типо LOD.. При определенном расстоянии обьекты выключаются со сцены и убирают нагрузку.

Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LOD : MonoBehaviour {
   
public float distLOD;
   
public GameObject CameraLOD;
   
public GameObject ObjectLOD;
   
public float RadiusLOD = 50;
   
// Use this for initialization
   
void Start () {
 
   
}
   
   
// Update is called once per frame
   
void Update () {
  distLOD
= Vector3.Distance (CameraLOD.transform.position, transform.position);
 
if (distLOD >= RadiusLOD) {
   
ObjectLOD.SetActive(false);
 
}
 
if (distLOD <= RadiusLOD) {
   
ObjectLOD.SetActive(true);
 
}
   
}
}

Автор - RealGamesWorld
Дата добавления - 16 Мар 2018 в 17:16
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025
Войти Зарегистрироваться