Помогите Переработка фукнции Unity|Vector3

i-593

9 Апр 2017
201
2
4
16
31
Есть код который размещает животных по конфигу. Всегда по высоте они размещены на земле, а можно чтобы он размещал их в воздухе? Я так понимаю проблема с Vector3.down... Помогите чтобы он брал hitinfo.point как задано. если будет -10, 500, 10 - то значит точка -10,10 и высота 500.

#region Body
public void SpawnObject(string monster, float x, float y, float z)
{
Vector3 position = new Vector3(x + Core.Random.Range(2, 2),
y + Core.Random.Range(2, 2),
z + Core.Random.Range(1, 1));
RaycastHit hitInfo;
Physics.Raycast(position, Vector3.down, out hitInfo);
{
Quaternion rotation = Quaternion.Euler(0.0f, (float)UnityEngine.Random.Range(0f, 360f), 0.0f);
rotation = Quaternion.FromToRotation(Vector3.down, hitInfo.normal) * rotation;
gameObject = Singleton<HNetworkManager>.Instance.NetInstantiate(monster, hitInfo.point, Quaternion.identity, GameManager.GetSceneTime());
Destroy(gameObject);
}
}
 
Vector3 positionAnimal = new Vector3(hitInfo.point.x, hitInfo.point.y+2f, hitInfo.point.z); // или
// Vector3 positionAnimal = hitInfo.point + new Vector3(0, 2f, 0);
gameObject = Singleton<HNetworkManager>.Instance.NetInstantiate(monster, positionAnimal, Quaternion.identity, GameManager.GetSceneTime());

так не?
единственное помню был какой-то баг, моделька животного на земле, но его фактическая позиция была выше. из-за этого животное не двигалось
 
В чем проблема при каждом добавлении животного прибавлять к высоте среднюю высоту высчитывая ее из других показателей? Ну или просто плюсовать к примеру 5
 
В чем проблема при каждом добавлении животного прибавлять к высоте среднюю высоту высчитывая ее из других показателей? Ну или просто плюсовать к примеру 5
я это и сделал
Vector3 positionAnimal = hitInfo.point + new Vector3(0, 2f, 0);
 
Чёт не получается. Полностью этот код переписанный как выглядит?

public void SpawnObject(string monster, float x, float y, float z)
{
Vector3 positionAnimal = new Vector3(hitInfo.point.x, hitInfo.point.y+2f, hitInfo.point.z);
RaycastHit hitInfo;
Physics.Raycast(position, new Vector3, out hitInfo);
{
Quaternion rotation = Quaternion.Euler(0.0f, (float)UnityEngine.Random.Range(0f, 360f), 0.0f);
rotation = Quaternion.FromToRotation(Vector3.down, hitInfo.normal);
gameObject = Singleton<HNetworkManager>.Instance.NetInstantiate(monster, positionAnimal, Quaternion.identity, GameManager.GetSceneTime());
Destroy(gameObject);
}
}
И вот так

не пашет синтакстис нарушен

public void SpawnObject(string monster, float x, float y, float z)
{
Vector3 position = new Vector3(x + Core.Random.Range(2, 2),
y + Core.Random.Range(1, 1),
z + Core.Random.Range(1, 1));
RaycastHit hitInfo;
Physics.Raycast(position, new Vector3, out hitInfo);
{
Quaternion rotation = Quaternion.Euler(0.0f, (float)UnityEngine.Random.Range(0f, 360f), 0.0f);
rotation = Quaternion.FromToRotation(Vector3.down, hitInfo.normal);
Vector3 positionAnimal = new Vector3(hitInfo.point.x, hitInfo.point.y+2f, hitInfo.point.z);
gameObject = Singleton<HNetworkManager>.Instance.NetInstantiate(monster, positionAnimal, Quaternion.identity, GameManager.GetSceneTime());
Destroy(gameObject);
}
}
В итоге сделал вот так
#region Body
public void SpawnObject(string monster, float x, float y, float z)
{
Vector3 position = new Vector3(x + Core.Random.Range(2, 2),
y + Core.Random.Range(2, 2),
z + Core.Random.Range(1, 1));
RaycastHit hitInfo;
Physics.Raycast(position, Vector3.down, out hitInfo);
{
Quaternion rotation = Quaternion.Euler(0.0f, (float)UnityEngine.Random.Range(0f, 360f), 0.0f);
rotation = Quaternion.FromToRotation(Vector3.down, hitInfo.normal) * rotation;
Vector3 positionAnimal = hitInfo.point + new Vector3(0, 2f, 0);
gameObject = Singleton<HNetworkManager>.Instance.NetInstantiate(monster, positionAnimal, Quaternion.identity, GameManager.GetSceneTime());
Destroy(gameObject);
}
}

-----------------------------------------------------------------
Плагин запустился, только не спавнится никто.
 
Последнее редактирование:
Активность
Пока никто не печатает сообщение