У меня GameObject-ы вложены в родительский объект "Vehicles"
:
Во время переключения сцен я получаю родительский элемент "Vehicles" и задаю принудительно координаты дочерних GameObject-ов:
...
void Awake () {
...
SceneName = SceneManager.GetActiveScene().name;
...
}
...
void Start()
{
...
if (SceneName == "ShellingMovement") {
RTCTankController[] AllTank = GamObjList.GetComponentsInChildren<RTCTankController> ();
for (int i = 0; i<AllTank.Length; i++) {
if (AllTank[i].gameObject.name == "M-577" && transform.name == "M-577") {
transform.position = new Vector3 (1711.297f,48.28059f,4054.481f);
transform.rotation = new Quaternion (0.9680001f,168.872f,-8.359f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-113" && transform.name == "M-113") {
transform.position = new Vector3 (1706.262f,47.77866f,4078.819f);
transform.rotation = new Quaternion (-3.127f,169.286f,0.452f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-992" && transform.name == "M-992") {
transform.position = new Vector3 (1696.998f,44.37513f,4131.027f);
transform.rotation = new Quaternion (-7.449f,169.144f,8.141001f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (0)" && transform.name == "M-109 (0)") {
transform.position = new Vector3 (1600.354f,49.0132f,4241.434f);
transform.rotation = new Quaternion (-1.198f,121.643f,1.891f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (1)" && transform.name == "M-109 (1)") {
transform.position = new Vector3 (1653.597f,48.71995f,4208.654f);
transform.rotation = new Quaternion (9.178f,122.015f,-2.963f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (2)" && transform.name == "M-109 (2)") {
transform.position = new Vector3 (1679.346f,41.82598f,4192.982f);
transform.rotation = new Quaternion (5.686f,123.144f,6.354f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (3)" && transform.name == "M-109 (3)") {
transform.position = new Vector3 (1689.954f,41.07978f,4165.436f);
transform.rotation = new Quaternion (-3.909f,168.431f,6.052001f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (4)" && transform.name == "M-109 (4)") {
transform.position = new Vector3 (1701.619f,46.75608f,4103.15f);
transform.rotation = new Quaternion (-2.511f,169.421f,-1.173f,0f);
break;
} else if (AllTank[i].gameObject.name == "M-109 (5)" && transform.name == "M-109 (5)") {
transform.position = new Vector3 (1629.769f,51.90841f,4223.346f);
transform.rotation = new Quaternion (3.046f,121.521f,-3.36f,0f);
break;
}
}
}
...
}
Но у меня в результате получается что объекты позиционируются не в том месте, причем иногда даже что то правильно позиционируется, а что то не в том месте.
Пробовал даже сохранить объект во время переключения сцен:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DontDestroy : MonoBehaviour {
void Start() {
GameObject Vehicles = GameObject.Find ("Vehicles");
DontDestroyOnLoad (Vehicles);
}
}
Но тогда объекты сохраняют свое место положение относительно предыдущего положения в сцене.
Вопрос:
1 Как мне однозначно определить что объект должен иметь определенные координаты для старта когда я переключил сцену? Возникает впечатление что родительскому объекту надо задавать тоже координату.
2 Объясните, знающие форумчане, чем position
, отличается от localPosition
. В моём представление position
- это позиционирование объекта не учитывая родительский элемент, а localPosition
- это позиционирование объекта относительно родительского. Так ли это ?
Скрипт перемещения объекта у меня такой :
...
void EnemyMovement()
{
if (pathContainer != null)
{
if (this.LeaderGObjInstance!=null && this.LeaderGObjInstance.gameObject.name!=transform.name) {
float DistanceObj = Vector3.Distance(transform.position,GameObject.Find (this.LeaderGObjInstance.gameObject.name).transform.position);
System.Random r = new System.Random ();
var space = r.Next (15, 30);
if ( DistanceObj > (float)space) {
speed=speed+0.1f;
if(speed>6) {
speed = 6;
}
} else if (DistanceObj < (float)space) {
speed=speed-0.3f;
if (speed<=0) {
speed = 0;
}
} else {
}
} else {
//Debug.Log ("LeaderGObjInstance==null");
}
float range = speed * Time.deltaTime;
Vector3 relativePos = current_waypoint - transform.position;//relativePos is the distence left to current waypoint
Waypoint_selecetion_code(relativePos);
current_waypoint = pathContainer.waypoints[currentPoint].position + new Vector3(0, sizeToAdd, 0);
if (SceneName == "ShootingOne" || SceneName=="ShootingDefeat") {
RotationCamera ();
transform.position = Vector3.MoveTowards(transform.position + new Vector3(0, sizeToAdd, 0), pathContainer.waypoints[currentPoint].position, range - ddelta);
} else if ( SceneName== "ShellingMovement" ) {
Face_waypoint(relativePos);
transform.position = Vector3.MoveTowards(transform.position + new Vector3(0, sizeToAdd, 0), pathContainer.waypoints[currentPoint].position, range - ddelta);
Moveobject();
} else {
// time += Time.deltaTime*(range - ddelta);
// Debug.Log (time);
if(currentPoint == 0 && SceneName== "Library") {
transform.position = pathContainer.waypoints [currentPoint].position;
}
Face_waypoint(relativePos);
transform.position = Vector3.MoveTowards(transform.position + new Vector3(0, sizeToAdd, 0), pathContainer.waypoints[currentPoint].position, range - ddelta);
Moveobject();
}
}
}
...
localPoisition
- это позиция объекта относительно позиции его родителя
position
- это позиция объекта относительно мировых координат
Если вы измените position
родителя - все дочерние объекты переместятся вместе с ним так, чтобы сохранить свой localPosition
.
Так что, да - вам нужно двигать только родителя.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я добавил авторизацию через facebook в Startup, решил уже туда все что можно запихать в попытках решить проблему:
На вебстранице показан код парсера в консолиХотелось бы научиться получать результат парсинга сайта в textbox формы