Баг при "Вылезании" из транспорта. - Форум Игроделов
Вс, 09 Фев 2025, 18:57 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Баг при "Вылезании" из транспорта.
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
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025