Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
iNikit | Дата: Воскресенье, 25 Ноября 2012, 19:55 | Сообщение # 3121 |
участник
Сейчас нет на сайте
| Есть ли у кого-нибудь FirstPersonControl.js на C#? (Из стандартного пакета "Standart Assets (mobile)")
UPD: Okay. Переписал на C# (через конвертер и мою клавиатуру): Code using UnityEngine; using System.Collections;
[RequireComponent (typeof(CharacterController))] public class FirstPersonControl : MonoBehaviour { ////////////////////////////////////////////////////////////// // FirstPersonControl.cs // // FirstPersonControl creates a control scheme where the camera // location and controls directly map to being in the first person. // The left pad is used to move the character, and the // right pad is used to rotate the character. A quick double-tap // on the right joystick will make the character jump. // // If no right pad is assigned, then tilt is used for rotation // you double tap the left pad to jump // // C# version by iNikit // http://vk.com/iNikit //////////////////////////////////////////////////////////////
// This script must be attached to a GameObject that has a CharacterController public MPJoystick moveTouchPad; public MPJoystick rotateTouchPad; // If unassigned, tilt is used
public Transform cameraPivot; // The transform used for camera rotation
public float forwardSpeed = 4; public float backwardSpeed = 1; public float sidestepSpeed = 1; public float jumpSpeed = 8; public float inAirMultiplier = 0.25f; // Limiter for ground speed while jumping public Vector2 rotationSpeed = new Vector2 (50, 25); // Camera rotation speed for each axis public float tiltPositiveYAxis = 0.6f; public float tiltNegativeYAxis = 0.4f; public float tiltXAxisMinimum = 0.1f; private Transform thisTransform; private CharacterController character; private Vector3 cameraVelocity; private Vector3 velocity; // Used for continuing momentum while in air private bool canJump = true;
void Start () { // Cache component lookup at startup instead of doing this every frame thisTransform = GetComponent< Transform > (); character = GetComponent< CharacterController > ();
// Move the character to the correct start position in the level, if one exists GameObject spawn = GameObject.Find ("PlayerSpawn"); if (spawn) thisTransform.position = spawn.transform.position; }
void OnEndGame () { // Disable joystick when the game ends moveTouchPad.Disable (); if (rotateTouchPad) rotateTouchPad.Disable ();
// Don't allow any more control changes when the game ends this.enabled = false; }
void Update () { Vector3 movement = thisTransform.TransformDirection (new Vector3 (moveTouchPad.position.x, 0, moveTouchPad.position.y));
// We only want horizontal movement movement.y = 0; movement.Normalize ();
// Apply movement from move joystick Vector2 absJoyPos = new Vector2 (Mathf.Abs (moveTouchPad.position.x), Mathf.Abs (moveTouchPad.position.y)); if (absJoyPos.y > absJoyPos.x) { if (moveTouchPad.position.y > 0) movement *= forwardSpeed * absJoyPos.y; else movement *= backwardSpeed * absJoyPos.y; } else movement *= sidestepSpeed * absJoyPos.x; // Check for jump if (character.isGrounded) { bool jump = false; MPJoystick touchPad; if (rotateTouchPad) touchPad = rotateTouchPad; else touchPad = moveTouchPad; if (!touchPad.IsFingerDown ()) canJump = true; if (canJump && touchPad.tapCount >= 2) { jump = true; canJump = false; } if (jump) { // Apply the current movement to launch velocity velocity = character.velocity; velocity.y = jumpSpeed; } } else { // Apply gravity to our velocity to diminish it over time velocity.y += Physics.gravity.y * Time.deltaTime; // Adjust additional movement while in-air movement.x *= inAirMultiplier; movement.z *= inAirMultiplier; } movement += velocity; movement += Physics.gravity; movement *= Time.deltaTime; // Actually move the character character.Move (movement); if (character.isGrounded) // Remove any persistent velocity after landing velocity = Vector3.zero; // Apply rotation from rotation joystick if (character.isGrounded) { Vector2 camRotation = Vector2.zero; if (rotateTouchPad) camRotation = rotateTouchPad.position; else { // Use tilt instead // print( iPhoneInput.acceleration ); Vector3 acceleration = Input.acceleration; float absTiltX = Mathf.Abs (acceleration.x); if (acceleration.z < 0 && acceleration.x < 0) { if (absTiltX >= tiltPositiveYAxis) camRotation.y = (absTiltX - tiltPositiveYAxis) / (1 - tiltPositiveYAxis); else if (absTiltX <= tiltNegativeYAxis) camRotation.y = -(tiltNegativeYAxis - absTiltX) / tiltNegativeYAxis; } if (Mathf.Abs (acceleration.y) >= tiltXAxisMinimum) camRotation.x = -(acceleration.y - tiltXAxisMinimum) / (1 - tiltXAxisMinimum); } camRotation.x *= rotationSpeed.x; camRotation.y *= rotationSpeed.y; camRotation *= Time.deltaTime; // Rotate the character around world-y using x-axis of joystick thisTransform.Rotate (0, camRotation.x, 0, Space.World); // Rotate only the camera with y-axis input cameraPivot.Rotate (-camRotation.y, 0, 0); } } } А вот найденный мною Joystick.js на C#: Code using UnityEngine; /** * File: MPJoystick.cs * Author: Chris Danielson of (monkeyprism.com) * // USED TO BE: Joystick.js taken from Penelope iPhone Tutorial // // Joystick creates a movable joystick (via GUITexture) that // handles touch input, taps, and phases. Dead zones can control // where the joystick input gets picked up and can be normalized. // // Optionally, you can enable the touchPad property from the editor // to treat this Joystick as a TouchPad. A TouchPad allows the finger // to touch down at any point and it tracks the movement relatively // without moving the graphic */ [RequireComponent(typeof(GUITexture))] public class MPJoystick : MonoBehaviour { class Boundary { public Vector2 min = Vector2.zero; public Vector2 max = Vector2.zero; } private static MPJoystick[] joysticks; // A static collection of all joysticks private static bool enumeratedJoysticks = false; private static float tapTimeDelta = 0.3f; // Time allowed between taps public bool touchPad; public Vector2 position = Vector2.zero; public Rect touchZone; public Vector2 deadZone = Vector2.zero; // Control when position is output public bool normalize = false; // Normalize output after the dead-zone? public int tapCount; private int lastFingerId = -1; // Finger last used for this joystick private float tapTimeWindow; // How much time there is left for a tap to occur private Vector2 fingerDownPos; //private float fingerDownTime; //private float firstDeltaTime = 0.5f; private GUITexture gui; private Rect defaultRect; // Default position / extents of the joystick graphic private Boundary guiBoundary = new Boundary(); // Boundary for joystick graphic private Vector2 guiTouchOffset; // Offset to apply to touch input private Vector2 guiCenter; // Center of joystick void Start() { gui = (GUITexture)GetComponent(typeof(GUITexture)); defaultRect = gui.pixelInset; defaultRect.x += transform.position.x * Screen.width;// + gui.pixelInset.x; // - Screen.width * 0.5; defaultRect.y += transform.position.y * Screen.height;// - Screen.height * 0.5; transform.position = Vector3.zero; if (touchPad) { // If a texture has been assigned, then use the rect ferom the gui as our touchZone if ( gui.texture ) touchZone = defaultRect; } else { guiTouchOffset.x = defaultRect.width * 0.5f; guiTouchOffset.y = defaultRect.height * 0.5f; // Cache the center of the GUI, since it doesn't change guiCenter.x = defaultRect.x + guiTouchOffset.x; guiCenter.y = defaultRect.y + guiTouchOffset.y; // Let's build the GUI boundary, so we can clamp joystick movement guiBoundary.min.x = defaultRect.x - guiTouchOffset.x; guiBoundary.max.x = defaultRect.x + guiTouchOffset.x; guiBoundary.min.y = defaultRect.y - guiTouchOffset.y; guiBoundary.max.y = defaultRect.y + guiTouchOffset.y; } } public Vector2 getGUICenter() { return guiCenter; } public void Disable() { gameObject.active = false; //enumeratedJoysticks = false; } private void ResetJoystick() { gui.pixelInset = defaultRect; lastFingerId = -1; position = Vector2.zero; fingerDownPos = Vector2.zero; } public bool IsFingerDown() { return (lastFingerId != -1); } public void LatchedFinger(int fingerId) { // If another joystick has latched this finger, then we must release it if ( lastFingerId == fingerId ) ResetJoystick(); } void Update() { if (!enumeratedJoysticks) { // Collect all joysticks in the game, so we can relay finger latching messages joysticks = (MPJoystick[])FindObjectsOfType(typeof(MPJoystick)); enumeratedJoysticks = true; } int count = Input.touchCount; if ( tapTimeWindow > 0 ) tapTimeWindow -= Time.deltaTime; else tapCount = 0; if ( count == 0 ) ResetJoystick(); else { for(int i = 0; i < count; i++) { Touch touch = Input.GetTouch(i); Vector2 guiTouchPos = touch.position - guiTouchOffset; bool shouldLatchFinger = false; if (touchPad) { if (touchZone.Contains(touch.position)) shouldLatchFinger = true; } else if (gui.HitTest(touch.position)) { shouldLatchFinger = true; } // Latch the finger if this is a new touch if (shouldLatchFinger && (lastFingerId == -1 || lastFingerId != touch.fingerId )) { if (touchPad) { //gui.color.a = 0.15; lastFingerId = touch.fingerId; //fingerDownPos = touch.position; //fingerDownTime = Time.time; } lastFingerId = touch.fingerId; // Accumulate taps if it is within the time window if ( tapTimeWindow > 0 ) tapCount++; else { tapCount = 1; tapTimeWindow = tapTimeDelta; } // Tell other joysticks we've latched this finger //for ( j : Joystick in joysticks ) foreach (MPJoystick j in joysticks) { if (j != this) j.LatchedFinger( touch.fingerId ); } } if ( lastFingerId == touch.fingerId ) { // Override the tap count with what the iPhone SDK reports if it is greater // This is a workaround, since the iPhone SDK does not currently track taps // for multiple touches if ( touch.tapCount > tapCount ) tapCount = touch.tapCount; if ( touchPad ) { // For a touchpad, let's just set the position directly based on distance from initial touchdown position.x = Mathf.Clamp( ( touch.position.x - fingerDownPos.x ) / ( touchZone.width / 2 ), -1, 1 ); position.y = Mathf.Clamp( ( touch.position.y - fingerDownPos.y ) / ( touchZone.height / 2 ), -1, 1 ); } else { // Change the location of the joystick graphic to match where the touch is Rect r = gui.pixelInset; r.x = Mathf.Clamp( guiTouchPos.x, guiBoundary.min.x, guiBoundary.max.x ); r.y = Mathf.Clamp( guiTouchPos.y, guiBoundary.min.y, guiBoundary.max.y ); gui.pixelInset = r; } if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) ResetJoystick(); } } } if (!touchPad) { // Get a value between -1 and 1 based on the joystick graphic location position.x = ( gui.pixelInset.x + guiTouchOffset.x - guiCenter.x ) / guiTouchOffset.x; position.y = ( gui.pixelInset.y + guiTouchOffset.y - guiCenter.y ) / guiTouchOffset.y; } // Adjust for dead zone var absoluteX = Mathf.Abs( position.x ); var absoluteY = Mathf.Abs( position.y ); if (absoluteX < deadZone.x) { // Report the joystick as being at the center if it is within the dead zone position.x = 0; } else if (normalize) { // Rescale the output after taking the dead zone into account position.x = Mathf.Sign( position.x ) * ( absoluteX - deadZone.x ) / ( 1 - deadZone.x ); } if (absoluteY < deadZone.y) { // Report the joystick as being at the center if it is within the dead zone position.y = 0; } else if (normalize) { // Rescale the output after taking the dead zone into account position.y = Mathf.Sign( position.y ) * ( absoluteY - deadZone.y ) / ( 1 - deadZone.y ); } } }
Самый лучший юзер GCUP :3
Сообщение отредактировал iNikit - Воскресенье, 25 Ноября 2012, 20:47 |
|
| |
Ammoku | Дата: Воскресенье, 25 Ноября 2012, 23:29 | Сообщение # 3122 |
частый гость
Сейчас нет на сайте
| кто-нить знает почему: Code var renderer = armArmors[i].GetComponent(SkinnedMeshRenderer); renderer.rootBone = clones[i].transform.FindChild("Character_rig/Root").transform;
выдает ошибку: Quote 'rootBone' is not a member of 'UnityEngine.SkinnedMeshRenderer'. хотя в инструкции сказно
|
|
| |
EchoIT | Дата: Понедельник, 26 Ноября 2012, 12:50 | Сообщение # 3123 |
старожил
Сейчас нет на сайте
| Quote Okay. Переписал на C# (через конвертер и мою клавиатуру): Спасибо, тоже хотел где-нибудь надыбать на C# его, а самому влом было. Quote кто-нить знает почему: Потому что нету такого "rootBone".
Долгожданный анонсик: State of War
|
|
| |
JHawk | Дата: Понедельник, 26 Ноября 2012, 15:43 | Сообщение # 3124 |
めゃくちゃちゃ
Сейчас нет на сайте
| Kira, Quote transform.position transform.Translate(vector3); Я надеюсь он двигает обьект прямо??
|
|
| |
Ammoku | Дата: Понедельник, 26 Ноября 2012, 15:54 | Сообщение # 3125 |
частый гость
Сейчас нет на сайте
| Quote (EchoIT) Потому что нету такого "rootBone". В каком смысле нету? Оо Это дефолтовая переменная скинед меш рендера. Я же не зря ссылку на оф. документацию привел, и в инспекторе есть такое поле...
Сообщение отредактировал Ammoku - Понедельник, 26 Ноября 2012, 15:55 |
|
| |
EchoIT | Дата: Понедельник, 26 Ноября 2012, 15:56 | Сообщение # 3126 |
старожил
Сейчас нет на сайте
| Quote В каком смысле нету? Оо Если пишет юнити, что нету, значит нету. У тебя какая версия-то? В справке всегда на последнюю версию приведены функции, в данном случае, на четвертую. Возможно, в предыдущих версиях не было rootBone.
Долгожданный анонсик: State of War
|
|
| |
JHawk | Дата: Понедельник, 26 Ноября 2012, 16:52 | Сообщение # 3127 |
めゃくちゃちゃ
Сейчас нет на сайте
| Вроде разобрался в вейпоинтах. Как использовать Area Light?
|
|
| |
Ammoku | Дата: Понедельник, 26 Ноября 2012, 19:13 | Сообщение # 3128 |
частый гость
Сейчас нет на сайте
| EchoIT, у меня последняя из 3ек. В инспекторе у меня rootBone есть. Но обратится к этому полю из скрипта не получается.
|
|
| |
Limonchik | Дата: Вторник, 27 Ноября 2012, 14:20 | Сообщение # 3129 |
частый гость
Сейчас нет на сайте
| Помогите пожалуйста. У меня из блендер экспортированные модели не воспроизводят анимацию. Они появляются сразу с каким то компонентом Animator Вставлял компонент animation и анимацию и она не воспроизводится. Раньше пользовался версией 3.5 при экспорте сразу появлялась модель с анимацией. Сейчас пользуюсь 4 версией и не могу понять что эта за компонент animator, наверно в нем то и все дело.
|
|
| |
gorlumfan | Дата: Вторник, 27 Ноября 2012, 16:19 | Сообщение # 3130 |
участник
Сейчас нет на сайте
| Здравствуйте друзья, может кто объяснить как работать с c# в Unity. В упор не понимаю что да как и где создавать скрипт, вроде как у них есть встроенный редактор, но как с ним работать я так и не понял. Начал разбирать мануал на оффициальном сайте, они вроде объясняют что мол так и так. Все просто. А на деле, ступор! Ребят если не сложно, будьте так добры помогите.
Добавлено (27.11.2012, 15:33) --------------------------------------------- Если не сложно можете как то на примере показать последовательность создания скрипта, с самим скриптом как нибудь сам разберусь. Не могу понять последовательность действий в самой юньке.
Добавлено (27.11.2012, 15:55) --------------------------------------------- Спасибо, частично ответ уже получил )
Добавлено (27.11.2012, 16:07) --------------------------------------------- Может я что то не так делаю, хотя скорей всего это так. Решил протестировать скрипт с офф.сайта документации по юнити. Вот что получилось в итоге. function OnGUI () { if (GUI.Button (Rect (10,10,150,100), "I am a button")) { print ("You clicked the button!"); } } Вот собственно скрипт, ошибка такова "a namespace can only contain types and namespace declarations"Добавлено (27.11.2012, 16:19) --------------------------------------------- Все ответ получен в лс, большое спасибо.
Сообщение отредактировал gorlumfan - Вторник, 27 Ноября 2012, 16:09 |
|
| |
Amnesia333 | Дата: Среда, 28 Ноября 2012, 12:52 | Сообщение # 3131 |
почетный гость
Сейчас нет на сайте
| У меня появился вопрос. Как сделать так, чтобы при вход в триггер у гг в руке появлялся определенный объект находящийся на сцене. В то же время этот объект должен удаляться со сцены и перемещаться в руку гг. Как это организовать?
Галлюцинацию я не забосил, просто решил от нее отдохнуть xD
Скоро Вы увидите еще 2 проекта. 1 - упоротое веселье, другой - очередной хоррор.
Сообщение отредактировал Amnesia333 - Среда, 28 Ноября 2012, 18:06 |
|
| |
Novatorvlad | Дата: Четверг, 29 Ноября 2012, 05:23 | Сообщение # 3132 |
постоянный участник
Сейчас нет на сайте
| Quote (Amnesia333) У меня появился вопрос. Как сделать так, чтобы при вход в триггер у гг в руке появлялся определенный объект находящийся на сцене. В то же время этот объект должен удаляться со сцены и перемещаться в руку гг. Как это организовать? Уже отвечали на подобные вопросы и ответ очень просто найти в и-нете.
Девбложек
|
|
| |
Amnesia333 | Дата: Четверг, 29 Ноября 2012, 15:59 | Сообщение # 3133 |
почетный гость
Сейчас нет на сайте
| Novatorvlad, а можно ссылку? Просто не понимаю, как можно сфорумлировать запрос в гугле.
Галлюцинацию я не забосил, просто решил от нее отдохнуть xD
Скоро Вы увидите еще 2 проекта. 1 - упоротое веселье, другой - очередной хоррор.
|
|
| |
Limonchik | Дата: Четверг, 29 Ноября 2012, 16:27 | Сообщение # 3134 |
частый гость
Сейчас нет на сайте
| Проблему с анимацией решил нашел видио на ютубе. У меня еще вопрос. Я знаю что на pro версии есть опция Navigation и что на free она закрыта. Есть ли какие нибудь уроки по созданию этой функции с помощью скриптов. Или можно как то попроще сделать?
|
|
| |
Kira | Дата: Четверг, 29 Ноября 2012, 19:22 | Сообщение # 3135 |
заслуженный участник
Сейчас нет на сайте
| Amnesia333, а вроде были уроки от юниттехов, про лерпа. Там все это есть самое начало. Организовать ОЧЕНЬ просто. Создать Го, в руке.Удалить Го со сцены. Можно просто его переместить в руку. Можно сделать пустышку в руке, и туда перемещать ГО делая его дочерним.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
|
|
| |
Knight1032 | Дата: Пятница, 30 Ноября 2012, 00:46 | Сообщение # 3136 |
заслуженный участник
Сейчас нет на сайте
| Как можно реализовать движение в точку?
Да, я программист, дизайнер, сценарист, Я сам себе издатель и сам себе игрок...
|
|
| |
SnakeR | Дата: Пятница, 30 Ноября 2012, 00:49 | Сообщение # 3137 |
постоянный участник
Сейчас нет на сайте
| Knight1032, в смысле? задать точку и двигать туда что то?
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
Knight1032 | Дата: Пятница, 30 Ноября 2012, 00:56 | Сообщение # 3138 |
заслуженный участник
Сейчас нет на сайте
| SnakeR, нет, есть предмет и нужно чтоб он двигался по напрвлению к другому заданному обьекту, пытался поворачивать движущийся обьект к цели лукетом и добовлял силу по направлению вектора вверх, но немного(или точнее совсем) не то...
Да, я программист, дизайнер, сценарист, Я сам себе издатель и сам себе игрок...
|
|
| |
Kira | Дата: Пятница, 30 Ноября 2012, 14:53 | Сообщение # 3139 |
заслуженный участник
Сейчас нет на сайте
| Quote (Knight1032) SnakeR, нет, есть предмет и нужно чтоб он двигался по напрвлению к другому заданному обьекту, пытался поворачивать движущийся обьект к цели лукетом и добовлял силу по направлению вектора вверх, но немного(или точнее совсем) не то... Что? Transforм - это пизиции объектов, transform.Translate(Vector3); перемещает го. что вам нужно, так не понять.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
|
|
| |
Amnesia333 | Дата: Пятница, 30 Ноября 2012, 17:34 | Сообщение # 3140 |
почетный гость
Сейчас нет на сайте
| Может кто-нибудь сказать как реализовать перемещение объекта на определенные координаты? Я понимаю, что делать это нужно с помощью transform.position в скрипте. Но к сожалению я не силен в написании скриптов. Может кто-нибудь дать скрипт? P.S Я не под чистую скопирую и вставлю в юнити. Попытаюсь разобраться как он работает, кое-что изменю.
Галлюцинацию я не забосил, просто решил от нее отдохнуть xD
Скоро Вы увидите еще 2 проекта. 1 - упоротое веселье, другой - очередной хоррор.
|
|
| |
|