@motkot
Вот код, что-то типо сборки пк. Сейчас таких скрипта 2, они похожи, но мне кажется это плохо. Как это можно улучшить?
Можно ли как то избавиться от тегов?
Можно ли как то избавиться от тегов?
Код материнской платы
using UnityEngine;
public class MotherBoardPlace : MonoBehaviour
{
Collision collision;
private void OnCollisionEnter(Collision collision)
{
this.collision = collision;
switch(collision.collider.tag)
{
case "Processor":
Place("ProcessorPlace", Vector3.zero);
break;
case "ram":
Place("RamPlace", new Vector3(0, 0, 90));
break;
case "CpuFan":
Place("CpuFanPlace", new Vector3(0, 0, 90));
break;
}
}
private void Place(string PlaceName, Vector3 Angle)
{
collision.rigidbody.isKinematic = true;
collision.rigidbody.detectCollisions = false;
collision.rigidbody.useGravity = false;
collision.transform.parent = transform.Find(PlaceName);
collision.transform.localPosition = Vector3.zero;
collision.transform.localEulerAngles = Vector3.zero + Angle;
if (!Grabbing.GrabObj.collider.CompareTag("Motherboard"))
{
Grabbing.grab = false;
}
}
}Код корпуса компа
using UnityEngine;
public class Place : MonoBehaviour
{
Collision collision;
private void OnCollisionEnter(Collision collision)
{
this.collision = collision;
switch(collision.collider.tag)
{
case "Motherboard":
place("MotherboardPlace", Vector3.zero);
break;
case "Power":
place("PowerPlace", Vector3.zero);
break;
case "Hdd":
place("HddPlace", Vector3.zero);
break;
case "Ssd":
place("SsdPlace", Vector3.zero);
break;
case "PcDoor":
place("PcDoorPlace", Vector3.zero);
break;
}
}
private void place(string PlaceName, Vector3 Angle)
{
collision.rigidbody.isKinematic = true;
collision.rigidbody.detectCollisions = false;
collision.rigidbody.useGravity = false;
collision.transform.parent = transform.Find(PlaceName);
collision.transform.localPosition = Vector3.zero;
collision.transform.localEulerAngles = Vector3.zero + Angle;
}
}
Решения вопроса 1
@GavriKos
— не используйте Find и прочее
— нет констант — переименование тегов влечет редактирование кода
— именование и кодстайл так себе (метод place в классе Place)
— с архитекторуй да, так себе
— нет констант — переименование тегов влечет редактирование кода
— именование и кодстайл так себе (метод place в классе Place)
— с архитекторуй да, так себе
1
комментарий
Ответы на вопрос 1
@profesor08
Строчки в коде замени на enum
https://docs.microsoft.com/en-us/dotnet/csharp/lan…
https://docs.microsoft.com/en-us/dotnet/csharp/lan…
Именование путает, непонятное.
Плохая архитектура привела к дублированию кода. Тебе надо взять объект и расположить в другом объекте, это можно вынести в отдельный код, который будет заниматься расположением одного объекта внутри другого. Сами объект должны предоставлять всю необходимую информацию, возможно их можно сделать инстансом одного класса, который характеризовал некий объект с именем и внутренними слотами, если они есть. Таким образом можно будет организовать любую вложенность и компоновку.
