Как идеально разместить gameObject на сетке через C # скрипт в единстве? - PullRequest
1 голос
/ 27 июня 2019

Краткое описание: У меня есть игровой объект с каменной сеткой.Тем не менее, нижняя часть сетки является священной и уродливой.Я хочу поместить его в меш, который выглядит как холм, чтобы игрок не мог видеть уродливое и освященное дно игрового объекта.

У меня есть скрипт, который использует raycast для размещения камня.Raycast находится над сеткой.Когда я делаю радиопередачу вниз, я получаю Vector3 на холмистой сетке.Я помещаю этот камень в эту точку, и я вижу его дно!Как избежать этого, используя код C #?

Вот мой полный вопрос:

Как: вращать и перемещать GameObject, в качестве компонента которого используется "сетка", так что он сидит на другом меше «идеально», не видя дна GameObject через c # скрипт в Unity.

Как это выглядит сейчас

Чего я хочу достичь

Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 27 июня 2019

Ниже приведен фрагмент кода, который использует нормальное значение попадания raycast для поворота каменной сетки.

Нормаль - это вектор, направленный наружу (перпендикулярно) геометрии сетки между вершинами:

https://en.wikipedia.org/wiki/Vertex_normal#/media/File:Vertex_normals.png

Если вы поместите этот скрипт на каменную сетку, он сообщит каменной сетке, что ее направленный вверх вектор совпадает с нормалью, где точка лучевой передачи.

using UnityEngine;

public class StickToTerrain : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out RaycastHit terrainHit))
            {
                transform.up = terrainHit.normal;
            }
        }
    }
}

Normal stick

...