Готовые скрипты и функции
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):
Код
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. камере.
Сообщение отредактировал N0rator - Сб, 28 Дек 2013, 18:31
Сообщение 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. камере. Автор - 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