Баг при "Вылезании" из транспорта.
VolkOrievith Дата: Чт, 25 Июл 2013, 10:37 | Сообщение # 1
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Сделал что-то вроде FPS, когда вхожу в танк, или самолет, всё норм, а когда выхожу, время от времени перс ВЫЛЕТАЕТ из кабины и летит с огромной скоростью. Использую CharacterController, CharacterMotor, FPSInputController (Всё по стандарту); Может кто знает, как остановить CharacterController сразу после выхода из Транспортного Средства? Вот схожие скрипты активизации танка и самолёта (JS) Код
private var Player : GameObject; private var PlayerCamera : SmoothFollow; var CamTar : Transform; var PlTr : GameObject; private var PlayerGranade : Granade; private var IsIn = false; private var CTrP : Transform; function Start (){ Player = GameObject.FindGameObjectWithTag("Player"); PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("SmoothFollow"); PlayerGranade = Player.GetComponentInChildren(Granade); } function Update () { if (!Player) Player = GameObject.FindGameObjectWithTag("Player"); if (!PlayerGranade) PlayerGranade = Player.GetComponentInChildren(Granade); if (!PlayerCamera) PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("SmoothFollow"); if (IsIn && Input.GetKeyDown("f") && transform.parent.rigidbody.velocity.magnitude < 10.0){ Player.active = true; Player.GetComponent(CharacterController).enabled = true; transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = false; transform.parent.gameObject.GetComponent("TankControl").PlayerIn = false; transform.parent.gameObject.GetComponentInChildren(TankTurretControl).enabled = false; PlayerGranade.enabled = true; PlayerCamera.gameObject.transform.parent = CTrP; PlayerCamera.enabled = false; PlayerCamera.gameObject.transform.localPosition = Vector3.zero; PlayerCamera.gameObject.transform.localRotation = Quaternion.identity; Player.transform.parent = null; Player.transform.localScale = Vector3(1,1,1); Player.transform.position = PlTr.transform.position; Player.transform.rotation = Quaternion.identity; IsIn = false; } if (Vector3.Distance(Player.transform.position, transform.position) < 2 && Input.GetKeyDown("f")){ if (!IsIn){ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = true; transform.parent.gameObject.GetComponent("TankControl").PlayerIn = true; transform.parent.gameObject.GetComponentInChildren(TankTurretControl).enabled = true; PlayerGranade.enabled = false; CTrP = PlayerCamera.gameObject.transform.parent; PlayerCamera.gameObject.transform.parent = null; PlayerCamera.enabled = true; PlayerCamera.target = CamTar; Player.transform.localScale = Vector3.zero; Player.transform.localRotation = Quaternion.identity; Player.transform.position = PlTr.transform.position; Player.transform.parent = PlTr.transform.parent; IsIn = true; Player.GetComponent(CharacterController).enabled = false; Player.active = false; } } } function OnGUI (){ if (Vector3.Distance(Player.transform.position, transform.position) < 2) GUI.Label(Rect(Screen.width / 2 - 200, Screen.height / 2 - 50, 400, 100), "Нажите F, чтобы сесть в танк"); }
Код
var KasScr : AirController; var Player : GameObject; var PlayerCamera : MouseOrbit; var PlTr : GameObject; var PlayerGranade : Granade; var IsIn = false; var CTrP : Transform; function Start (){ Player = GameObject.FindGameObjectWithTag("Player"); PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("MouseOrbit"); PlayerGranade = Player.GetComponentInChildren(Granade); } function Update () { if (!Player) Player = GameObject.FindGameObjectWithTag("Player"); if (!PlayerGranade) PlayerGranade = Player.GetComponentInChildren(Granade); if (!PlayerCamera) PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("MouseOrbit"); if (IsIn && Input.GetKeyDown("f") && transform.parent.rigidbody.velocity.magnitude < 10.0){ /* var colls : Collider[] = transform.parent.gameObject.GetComponentsInChildren(Collider); for (var Hit : Collider in colls) { if (!Hit) continue; Physics.IgnoreCollision(Hit, Player.collider); }*/ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = false; transform.parent.gameObject.GetComponent("camera").enabled = false; KasScr.PlayerIn = false; PlayerGranade.enabled = true; PlayerCamera.gameObject.transform.parent = CTrP; PlayerCamera.enabled = false; PlayerCamera.gameObject.transform.localPosition = Vector3.zero; PlayerCamera.gameObject.transform.localRotation = Quaternion.identity; Player.transform.parent = null; Player.transform.localScale = Vector3(1,1,1); Player.active = true; Player.transform.position = PlTr.transform.position; Player.transform.rotation = Quaternion.identity; IsIn = false; } if (Vector3.Distance(Player.transform.position, transform.position) < 2 && Input.GetKeyDown("f")){ if (!IsIn){ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = true; transform.parent.gameObject.GetComponent("camera").enabled = true; KasScr.PlayerIn = true; PlayerGranade.enabled = false; CTrP = PlayerCamera.gameObject.transform.parent; PlayerCamera.gameObject.transform.parent = null; PlayerCamera.enabled = true; PlayerCamera.target = transform.parent; Player.transform.localScale = Vector3.zero; Player.transform.localRotation = Quaternion.identity; Player.active = false; Player.transform.position = PlTr.transform.position; Player.transform.parent = PlTr.transform.parent; IsIn = true; } } } function OnGUI (){ if (Vector3.Distance(Player.transform.position, transform.position) < 2) GUI.Label(Rect(Screen.width / 2 - 200, Screen.height / 2 - 50, 400, 100), "Нажите F, чтобы сесть в самолет"); }
Сообщение Сделал что-то вроде FPS, когда вхожу в танк, или самолет, всё норм, а когда выхожу, время от времени перс ВЫЛЕТАЕТ из кабины и летит с огромной скоростью. Использую CharacterController, CharacterMotor, FPSInputController (Всё по стандарту); Может кто знает, как остановить CharacterController сразу после выхода из Транспортного Средства? Вот схожие скрипты активизации танка и самолёта (JS) Код
private var Player : GameObject; private var PlayerCamera : SmoothFollow; var CamTar : Transform; var PlTr : GameObject; private var PlayerGranade : Granade; private var IsIn = false; private var CTrP : Transform; function Start (){ Player = GameObject.FindGameObjectWithTag("Player"); PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("SmoothFollow"); PlayerGranade = Player.GetComponentInChildren(Granade); } function Update () { if (!Player) Player = GameObject.FindGameObjectWithTag("Player"); if (!PlayerGranade) PlayerGranade = Player.GetComponentInChildren(Granade); if (!PlayerCamera) PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("SmoothFollow"); if (IsIn && Input.GetKeyDown("f") && transform.parent.rigidbody.velocity.magnitude < 10.0){ Player.active = true; Player.GetComponent(CharacterController).enabled = true; transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = false; transform.parent.gameObject.GetComponent("TankControl").PlayerIn = false; transform.parent.gameObject.GetComponentInChildren(TankTurretControl).enabled = false; PlayerGranade.enabled = true; PlayerCamera.gameObject.transform.parent = CTrP; PlayerCamera.enabled = false; PlayerCamera.gameObject.transform.localPosition = Vector3.zero; PlayerCamera.gameObject.transform.localRotation = Quaternion.identity; Player.transform.parent = null; Player.transform.localScale = Vector3(1,1,1); Player.transform.position = PlTr.transform.position; Player.transform.rotation = Quaternion.identity; IsIn = false; } if (Vector3.Distance(Player.transform.position, transform.position) < 2 && Input.GetKeyDown("f")){ if (!IsIn){ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = true; transform.parent.gameObject.GetComponent("TankControl").PlayerIn = true; transform.parent.gameObject.GetComponentInChildren(TankTurretControl).enabled = true; PlayerGranade.enabled = false; CTrP = PlayerCamera.gameObject.transform.parent; PlayerCamera.gameObject.transform.parent = null; PlayerCamera.enabled = true; PlayerCamera.target = CamTar; Player.transform.localScale = Vector3.zero; Player.transform.localRotation = Quaternion.identity; Player.transform.position = PlTr.transform.position; Player.transform.parent = PlTr.transform.parent; IsIn = true; Player.GetComponent(CharacterController).enabled = false; Player.active = false; } } } function OnGUI (){ if (Vector3.Distance(Player.transform.position, transform.position) < 2) GUI.Label(Rect(Screen.width / 2 - 200, Screen.height / 2 - 50, 400, 100), "Нажите F, чтобы сесть в танк"); }
Код
var KasScr : AirController; var Player : GameObject; var PlayerCamera : MouseOrbit; var PlTr : GameObject; var PlayerGranade : Granade; var IsIn = false; var CTrP : Transform; function Start (){ Player = GameObject.FindGameObjectWithTag("Player"); PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("MouseOrbit"); PlayerGranade = Player.GetComponentInChildren(Granade); } function Update () { if (!Player) Player = GameObject.FindGameObjectWithTag("Player"); if (!PlayerGranade) PlayerGranade = Player.GetComponentInChildren(Granade); if (!PlayerCamera) PlayerCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent("MouseOrbit"); if (IsIn && Input.GetKeyDown("f") && transform.parent.rigidbody.velocity.magnitude < 10.0){ /* var colls : Collider[] = transform.parent.gameObject.GetComponentsInChildren(Collider); for (var Hit : Collider in colls) { if (!Hit) continue; Physics.IgnoreCollision(Hit, Player.collider); }*/ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = false; transform.parent.gameObject.GetComponent("camera").enabled = false; KasScr.PlayerIn = false; PlayerGranade.enabled = true; PlayerCamera.gameObject.transform.parent = CTrP; PlayerCamera.enabled = false; PlayerCamera.gameObject.transform.localPosition = Vector3.zero; PlayerCamera.gameObject.transform.localRotation = Quaternion.identity; Player.transform.parent = null; Player.transform.localScale = Vector3(1,1,1); Player.active = true; Player.transform.position = PlTr.transform.position; Player.transform.rotation = Quaternion.identity; IsIn = false; } if (Vector3.Distance(Player.transform.position, transform.position) < 2 && Input.GetKeyDown("f")){ if (!IsIn){ transform.parent.gameObject.GetComponent("Helicopter_Weapon_Script").enabled = true; transform.parent.gameObject.GetComponent("camera").enabled = true; KasScr.PlayerIn = true; PlayerGranade.enabled = false; CTrP = PlayerCamera.gameObject.transform.parent; PlayerCamera.gameObject.transform.parent = null; PlayerCamera.enabled = true; PlayerCamera.target = transform.parent; Player.transform.localScale = Vector3.zero; Player.transform.localRotation = Quaternion.identity; Player.active = false; Player.transform.position = PlTr.transform.position; Player.transform.parent = PlTr.transform.parent; IsIn = true; } } } function OnGUI (){ if (Vector3.Distance(Player.transform.position, transform.position) < 2) GUI.Label(Rect(Screen.width / 2 - 200, Screen.height / 2 - 50, 400, 100), "Нажите F, чтобы сесть в самолет"); }
Автор - VolkOrievith Дата добавления - 25 Июл 2013 в 10:37
Altair Дата: Чт, 25 Июл 2013, 12:21 | Сообщение # 2
Unity 3D PRO Developer
Сообщений: 758
Награды:
6
Репутация:
195
Статус: Offline
Я не знаю,в код не всматривался,но по сути,сначала ті ж должен отключить перса например просто через SetActive потом если надо то и характер контроллер но по сути он тоже должен біть не активен,потом,активируешь транспорт,а при выходе всё тоже токо наоборот.Вылетает он может из-за конфликта коллайдеров..
Сообщение Я не знаю,в код не всматривался,но по сути,сначала ті ж должен отключить перса например просто через SetActive потом если надо то и характер контроллер но по сути он тоже должен біть не активен,потом,активируешь транспорт,а при выходе всё тоже токо наоборот.Вылетает он может из-за конфликта коллайдеров.. Автор - Altair Дата добавления - 25 Июл 2013 в 12:21
VolkOrievith Дата: Пт, 26 Июл 2013, 13:54 | Сообщение # 3
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Цитата (Altair )
должен отключить перса например просто через SetActive потом если надо то и характер контроллер но по сути он тоже должен біть не активен,потом,активируешь транспорт,а при выходе всё тоже токо наоборот
У меня именно так. Цитата (Altair )
Вылетает он может из-за конфликта коллайдеров
Нет. Точно не изза этого, да кстати как написать IgnorCollision (Объект.Коллайдер, CharacterController)?
Сообщение Цитата (Altair )
должен отключить перса например просто через SetActive потом если надо то и характер контроллер но по сути он тоже должен біть не активен,потом,активируешь транспорт,а при выходе всё тоже токо наоборот
У меня именно так. Цитата (Altair )
Вылетает он может из-за конфликта коллайдеров
Нет. Точно не изза этого, да кстати как написать IgnorCollision (Объект.Коллайдер, CharacterController)?Автор - VolkOrievith Дата добавления - 26 Июл 2013 в 13:54