Программы+языки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программы+языки » Скрипты » Сборник скриптов прямо здесь


Сборник скриптов прямо здесь

Сообщений 1 страница 2 из 2

1

Вот скрипт примитивного движения:
FPSWalker.js из стандартного пакета.

Код:
 

 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)

Вот переработанный скрипт

Код:
// передвижение персонажа 

 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); // применяем движение 
    } 
 }

Скрипт, вращает и перемещает текстуру, может служить для создания мини-карты.

Код:
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;         
             } 
 }

Скрипт автоматической двери:

Код:
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.

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

Код:
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 устанавливаем кол-во кадров и перетаскиваем в нее картинки в порядке последовательности.

Скрипт для перехода персонажа между уровнями с указанием точки появления и угла поворота в каждой сцене

Код:
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); 
     } 
 }

Скрипт отключения/включения курсора по нажатию 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; 
   } 

 }

Что - то вроде 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); 
 }

База для создания функции плавания в воде. Еще нужно много чего добавить.. Но может кому и пригодится

Код:
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; 
   }  
  } 
   
   
 }

2 скрипта:
1) Движение камеры прямо пропорциональное движению мыши(Как в MMORPG):

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

 public class camMove : MonoBehaviour { 

       public Transform target; //Объект за которым летаем(Наш персонаж)    
       public float distance = 3.0f; //Расстояние от камеры до объекта 
       public float xSpeed = 125.0f; //Чувствительность по оси X    
       public float ySpeed = 50.0f; //Чувствительность по оси Y    
       public float targetHeight = 2.0f; //Высота относительно объекта    
          
    //Лимиты    
       public float yMinLimit = -40; 
       public float yMaxLimit = 80; 
       //Приближение, удаление и скорость вращения камеры 
       public float maxDistance = 10.0f; 
       public float minDistance = 0.5f; 
       public float zoomRotate = 90.0f; 

       private float x = 0.0f; //Угол поворота по X 
       private float y = 0.0f; //Угол поворота по Y 

       [AddComponentMenu("Scripts/Mouse Orbit")] //Добавляем в меню    

       public void Start() 
       { 
           //переворачиваем углы    
           Vector3 angles = transform.eulerAngles; 
           x = angles.y; 
           y = angles.x; 

           if (rigidbody) 
               rigidbody.freezeRotation = true; //Если камера столкнется с физическим объектом, она остановиться    
       } 

       public void LateUpdate() 
       { 
           if (target) 
           {//Если цель установлена(Персонаж)    
               //Меняем углы согласно положению мыши    
               x += Input.GetAxis("Mouse X") * xSpeed * 0.02f; 
               y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; 
               //Меняем дистанцию до персонажа.    
               distance -= (Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime) * zoomRote * Mathf.Abs(distance); 
               distance = Mathf.Clamp(distance, minDistance, maxDistance); 

               y = ClampAngle(y, yMinLimit, yMaxLimit); //Вызов функции для ограничения углов поворота    
               if(Input.GetMouseButton(1)) playerMove.x = x; //Если нажата ПКМ, Rotate у нашего персонажа. 
               //Повернуть камеру согласно полученным данным    
               Quaternion rotation = Quaternion.Euler(y, x, 0); 
               transform.rotation = rotation; 

               //Двигаем камеру и следим за персонажем    
               Vector3 position = rotation * new Vector3(0.0f, targetHeight + 0.5f, -distance) + target.position; 
               transform.position = position; 

               //Во избежание провала под ландшафт 
               RaycastHit hit; 
               Vector3 trueTargetPosition = target.transform.position - new Vector3(0, -targetHeight, 0); 
               if (Physics.Linecast(trueTargetPosition, transform.position, out hit)) 
               { 
                   float tempDistance = Vector3.Distance(trueTargetPosition, hit.point) - 0.28f; 
                   position = target.position - (rotation * Vector3.forward * tempDistance + new Vector3(0, -targetHeight, 0)); 
                   transform.position = position; 
               } 
           } 

       } 
       //Меняем значения углов    
       public static float ClampAngle(float angle, float min, float max) 
       { 
           if (angle < -360) 
               angle += 360; 
           if (angle > 360) 
               angle -= 360; 
           return Mathf.Clamp(angle, min, max); 
       } 
 }

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

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

 public class playerMove : MonoBehaviour { 

       private GameObject player;    

       public static int speed = 5; //Скорость перемещения персонажа    
       public static int ALWspeed; //постоянная скорость перемещения персонажа    
       public int rotation = 250; //Скорость поворота персонажа    
       public int jump = 3; //Высота прыжка 

       public static float x = 0.0f; //угол поворота персонажа по оси x    
       void Start() 
       { 
           ALWspeed = speed; //Приравниваем скорости 
           player = (GameObject)this.gameObject; //Объект накотором висит скрипт - игрок 
       } 

       void Update() 
       { 
           Quaternion rotate = Quaternion.Euler(0, x, 0); 
           bool canRun = false; //Для движения 

           speed = ALWspeed; 
              
              
              
           //Shift: 
           if (Input.GetKey(KeyCode.LeftShift)) 
           { 
               speed = ALWspeed * 2 + 2; 
           } 
           if (Input.GetKeyUp(KeyCode.LeftShift)) //Если отпустить    
           { 
               speed = ALWspeed; //Возвращаем стандартное значение    
           } 

           //A: 
           if (Input.GetKey(KeyCode.A)) 
           { 
               rotate = Quaternion.Euler(0, x -90.0f, 0); 

               if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.W)) 
                   rotate = Quaternion.Euler(0, x + 45.0f, 0); 

               if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.S)) 
                   rotate = Quaternion.Euler(0, x - 45.0f, 0); 

               canRun = true; 
               if (Input.GetKey(KeyCode.LeftShift)) 
                   animation.CrossFade("Run"); 
               else 
                   animation.CrossFade("Walk"); 
           } 
           if (Input.GetKeyUp(KeyCode.A)) 
           { 
               animation.CrossFade("idle"); 
               canRun = false; 
           } 

           //D: 
           if (Input.GetKey(KeyCode.D)) 
           { 
               rotate = Quaternion.Euler(0, x + 90.0f, 0); 

               if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.W)) 
                   rotate = Quaternion.Euler(0, x - 45.0f, 0); 

               if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.S)) 
                   rotate = Quaternion.Euler(0, x + 45.0f, 0); 

               canRun = true; 
               if (Input.GetKey(KeyCode.LeftShift)) 
                   animation.CrossFade("Run"); 
               else 
                   animation.CrossFade("Walk"); 
           } 
           if (Input.GetKeyUp(KeyCode.D)) 
           { 
               animation.CrossFade("idle"); 
               canRun = false; 
           } 

           //W: 
           if (Input.GetKey(KeyCode.W)) 
           { 
               if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A)) 
                   rotate = Quaternion.Euler(0, x - 45.0f, 0); 

               if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.D)) 
                   rotate = Quaternion.Euler(0, x + 45.0f, 0); 

               canRun = true; 
               if(Input.GetKey(KeyCode.LeftShift)) 
                   animation.CrossFade("Run"); 
               else 
                   animation.CrossFade("Walk"); 
           } 
           if (Input.GetKeyUp(KeyCode.W)) 
           { 
               animation.CrossFade("idle"); 
               canRun = false; 
           } 

           //S: 
           if (Input.GetKey(KeyCode.S)) 
           { 
               rotate = Quaternion.Euler(0, x + 180.0f, 0); 

               if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.A)) 
                   rotate = Quaternion.Euler(0, x - 135.0f, 0); 

               if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.D)) 
                   rotate = Quaternion.Euler(0, x + 135.0f, 0); 

               canRun = true; 
               if (Input.GetKey(KeyCode.LeftShift)) 
                   animation.CrossFade("Run"); 
               else 
                   animation.CrossFade("Walk"); 
           } 
           if (Input.GetKeyUp(KeyCode.S)) 
           { 
               animation.CrossFade("idle"); 
               canRun = false; 
           } 

           //Space: 
           if (Input.GetKey(KeyCode.Space)) 
           { 
               animation.CrossFade("Jump");               
               player.transform.position += player.transform.up * jump * Time.deltaTime; 

           } 
           if (Input.GetKeyUp(KeyCode.Space)) animation.CrossFade("idle"); 

           //LMB: 
           if (Input.GetMouseButtonDown(0)) animation.CrossFade("Attack"); 
        
           //rotation: 
           player.transform.rotation = rotate; 
        
     //Движение 
           if(canRun == true) player.transform.position += player.transform.forward * speed * Time.deltaTime; 
       } 
 }

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

скрипт приседания на UJS:

Код:
var controller : CharacterController; 
 var oldHeight; 
 var newHeight: float; 
 var newPos; 

 function Start () { 
 controller = GetComponent(CharacterController); 
 oldHeight = controller.height; 
 } 

 function Update() { 
 newPos = new Vector3(transform.position.x, transform.position.y + 0.7f, transform.position.z); 
          if (Input.GetKey(KeyCode.LeftControl)) { 
              controller.height = newHeight; 
          } else { 
          if (Input.GetKeyUp (KeyCode.LeftControl)) { 
              controller.height = oldHeight; 
              transform.position = newPos; 
          } 
          } 
   }

Но можно ещё и так:

Код:
var controller : CharacterController; 
 var oldHeight; 

  function Start () 
  { 
     controller = GetComponent(CharacterController); 
     oldHeight = controller.height; 
  } 

  function Update() 
  { 
     if (Input.GetKey(KeyCode.LeftControl)) controller.height = controller.height / 2; 
  if (Input.GetKeyUp (KeyCode.LeftControl)) 
  { 
         controller.height  = oldHeight; 
         transform.position.y = transform.position.y + 0.7f; 
     } 
 }

И так:

Код:
var controller : CharacterController; 
 var oldHeight; 
 var flagStand = false; 
 var dist; 

 function Start () 
 { 
      controller = GetComponent(CharacterController); 
      oldHeight = controller.height; 
      dist = oldheight / 4 ; //вообще - (oldheight - controller.height) / 2, но т.к.  controller.height == oldheight / 2, то получаем это 
 } 

 function Update() 
 { 
      if(flagStand && !Physics.Raycast (transform.position, Vector2.up, oldheight / 2)) 
      { 
         StandUo(); 
         flagStand = false; 
      } 
      if (Input.GetKey(KeyCode.LeftControl)) Squatting(); 
      if (Input.GetKeyUp (KeyCode.LeftControl) ) 
      { 
         if(!Physics.Raycast (transform.position, Vector2.up, oldheight / 2)) StandUp(); 
         else flagStand = true; 
      } 
 } 
 function StandUp() 
 { 
      controller.height  = oldHeight; 
      transform.position.y = transform.position.y + dist + 0.01f 
 } 
 functoin Squatting() 
 { 
      controller.height = controller.height / 2; 
      transform.position.y = transform.position.y - dist + 0.01f; 
 }

Вот ещё:

Код:
var anim_1: AnimationClip; 
 var anim_2: AnimationClip; 
 var SIDIT : boolean = false; 
 var potolok = false; 
 var looch = 12;//длина луча 

 function Start () { 
 animation[anim_1.name].speed = 3; 
 animation[anim_1.name].wrapMode = WrapMode.Once; 

 animation[anim_2.name].speed = 3; 
 animation[anim_2.name].wrapMode = WrapMode.Once; 
 } 

 function Update() { 

 if (Input.GetKeyDown(KeyCode.LeftControl) && !SIDIT) { 
 animation.Play(anim_1.name); 
 SIDIT = true; 
 } 

 if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT && 
 !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) { 
 animation.Play(anim_2.name); 
 SIDIT = false; 
 } 
 else { 
 if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT 
 && Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) { 
 potolok = true; 
 return; 
 } 
 } 
 if(potolok && !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)){ 

 animation.Play(anim_2.name); 
 SIDIT = false; 
 potolok = false; 
 } 
 }

0

2

Скрипт для лука:

Код:
 /*//////////////////////////////////////////*/ 
 /*/////////////////Sector13////////////////*/ 
 /*/////////////////////////////////////////*/ 

 var projectile : Rigidbody; 
 var speed = 20; 
 var Potrons = 5; 
 private var Timer : float = 0.0;         
 private var TimerFire : float = 0.0; 
 var Damage = 50; 

 function OnGUI () { 
           windowRect = GUI.Window (0, Rect (20, 20, 200, 50), DoMyWindow, "Сила: " + Timer); 
           GUI.Label(new Rect(30,450,250,30)," Гранаты: " + Potrons); 
 } 

 function DoMyWindow (windowID : int) { 
 GUI.HorizontalSlider (Rect (10, 25, 180, 45), Timer, 0.0, 1); 
 } 

 function Update() 
 { 
               if( Input.GetKey("q")) 
               if(Potrons >=1) 
               { 
             Timer += Time.deltaTime;         
          if (Timer >=1) 
          { 
          Timer = 1; 
          } 
         } 
         if( Input.GetKeyUp("q")) 
         if(Potrons >=1) 
               { 
         TimerFire += (Timer*1.5) * speed; 
         Potrons -= 1; 
         var instantiatedProjectile : Rigidbody = Instantiate( projectile, transform.position, transform.rotation ); 
         instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, TimerFire ) );        
         Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );         
         Timer = 0.0;         
         TimerFire = 0.0; 
         }         
 }

0


Вы здесь » Программы+языки » Скрипты » Сборник скриптов прямо здесь


Рейтинг форумов | Создать форум бесплатно