При вращении объекта вокруг целевого объекта радиус не выглядит очень точным на 100%. как сделать радиус точным?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 При вращении объекта вокруг целевого объекта радиус не выглядит очень точным на 100%. как сделать радиус точным?

Сообщение Anonymous »

Я установил в инспекторе значение радиуса 0,1, но когда оно вращается вокруг персонажа игрока, кажется, что радиус тогда больше. 0,1
когда я устанавливаю радиус примерно 1,6 во время выполнения или в режиме редактирования, сфера оказывается очень близко к персонажу игрока, но затем, когда я изменяю радиус во время выполнения или в режиме редактирования на 0,1, сфера удаляется от персонажа игрока, а не приближается.
первый снимок экрана — когда масштабирование дочернего элемента сферы установлено на 0,1, 0,1, 0,1, а второй снимок экрана — когда я пытался установить дочерний элемент Sphere масштабируется до 1,1,1, в обоих случаях он выглядит слишком далеко для радиуса 0,1.
[img]https://i .stack.imgur.com/wBLrv.jpg[/img]

[img]https://i.stack.imgur. com/buSHB.jpg[/img]

и скрипт, прикрепленный к пустому GameObject.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateAroundPoint : MonoBehaviour
{
public GameObject objToRotateAround;
[Header("The axis by which it will rotate around")]
public Vector3 axis;
[Header("Angle covered per Second")]
public float anglePerSecond;

public float upperLimit;
public float lowerLimit;
public float delay;

private float height;
private float prevHeight;
private float time;

[SerializeField] private float radius;

private float lastRadius;

void Update()
{
// Check if the radius was changed
if (!Mathf.Approximately(radius, lastRadius))
{
ApplyRadius();
}

time += Time.deltaTime;
if (time > delay)
{
prevHeight = height;
height = Random.Range(lowerLimit, upperLimit);

time = 0;
}

// Rotate with a frame-rate independent angle per second
transform.RotateAround(objToRotateAround.transform.position, axis, anglePerSecond * Time.deltaTime);

// For the Lerp you want a factor between 0 and 1
// not between 0 and delay
// => divide by delay gives you a factor between 0 and 1
transform.position = new Vector3(transform.position.x, Mathf.Lerp(prevHeight, height, time / delay), transform.position.z);
}

private void ApplyRadius()
{
// Get the dorection vector from the pivot to your current object position
var direction = (transform.position - objToRotateAround.transform.position).normalized;

// set your object in the same direction but at distance of radius
transform.position = objToRotateAround.transform.position + direction * radius;

lastRadius = radius;
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... e-real-acc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы при вращении объекта вокруг двух осей (C#)
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Проблемы при вращении объекта вокруг двух осей (C#)
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Проблемы при вращении объекта вокруг двух осей (C#)
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Пропорциональное масштабирование объектов внутри другого объекта при вращении.
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Пропорциональное масштабирование объектов внутри другого объекта при вращении.
    Anonymous » » в форуме C#
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»