Готовые скрипты и функции - Форум Игроделов
Пт, 29 Мар 2024, 11:35 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Готовые скрипты и функции (Выкладываем.)
Готовые скрипты и функции
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
Форум Игроделов » UNITY3D » СКРИПТИНГ » Готовые скрипты и функции (Выкладываем.)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024