2015-08-26 4 views
0

Я много раз искал, но не могу найти решение этой проблемы.Unity 5.1 плеер управления вторичным объектом относительно объекта игрока

Что я хочу - это управлять игровым объектом, который вращается вокруг объекта игрока на фиксированном расстоянии на основе входа аналогового джойстика, независимо от движения игрока. Я также хочу, чтобы объект смотрел наружу, когда он перемещается по игроку.

Я оставил аналоговую палку, установленную для движения плеера, и работает и имеет правильную аналоговую ручку, настроенную и протестированную, поэтому я знаю, что вход работает.

Я пробовал transform.rotate, RotateAround, .position и quaternions и т. Д., Но не могу понять это или найти что-нибудь, что может помочь. Я довольно новичок в этом, поэтому, возможно, простое решение, я просто не вижу его!

Цените любую помощь, которую вы могли бы быть в состоянии дать :) Спасибо Mil

EDIT 2: Вторая попытка

, так что я получил это до сих пор в настоящее время:

public class ShieldMovement : MonoBehaviour { 

public Transform target; //player shield is attaced to 

float distance = 0.8f; // distance from player so it doesn't clip 
Vector3 direction = Vector3.up; 


// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() { 

    float angle = Mathf.Atan2 (Input.GetAxisRaw("rightH"), Input.GetAxisRaw("rightV"))* Mathf.Rad2Deg; 

    if(Input.GetAxis("rightH") != 0f || Input.GetAxis("rightV") != 0f) 
    { 
     direction = new Vector3(Input.GetAxis("rightH"),Input.GetAxis("rightV"), 0.0f) ; 
    } 

    Ray ray = new Ray(target.position, direction); 
    transform.position = ray.GetPoint(distance); 

    if(Input.GetAxis("rightH") != 0f || Input.GetAxis("rightV") != 0f) 
    { 
     transform.rotation = Quaternion.AngleAxis(angle,Vector3.forward*-1); 
    } 


} 

}

Я бы хотел, чтобы это было плавное вращение экрана вокруг t он собирается в новое место вместо того, чтобы телепортироваться туда. Я пробовал некоторые lerps и некоторые slerps, до сих пор все, что мне удалось, интерполируется с одной точки по окружности в прямой линии до новой точки. Невозможно придумать способ заставить его вращаться вокруг игрока, как если бы вы просто вращали палку. Надеюсь, это имеет смысл!

Любые идеи, которые вы замечаете, люди?

+0

ли вы уже заглядывали к сценарию камеры SmoothFollow? Это заставляет камеру следить за игроком под определенным углом и расстоянием, вращающимся к нему лицом. Вы также можете приспособиться к своему объекту-повторителю и увеличить положение (x, 0, z) при перемещении палки. Я не могу проверить его прямо сейчас, но просмотр сценария, кажется, хороший способ наконец понять, что вам нужно сделать ... – Frohlich

+0

Я проверю это, спасибо :) Будет ли сообщение, если он работает :) –

+0

Выяснилось, как бы это получилось, но я не могу понять, как это происходит.Я опубликовал частичное решение без анимации (так как я не могу получить эту работу) выше, если вы хотите увидеть, что у меня до сих пор :) –

ответ

0

Heres два пути достижения того, что вы хотите

Пожалуйста, обратите внимание: это не был проверен

С пользовательской нормированной процессии (0f именно Vector3.forward, 1f возвращает вас Vector3.forward)

using UnityEngine; 
using System.Collections; 

public class Follower : MonoBehaviour { 

    float distance = 10f; 
    Vector3 direction = Vector3.forward; 
    float procession = 0f; // exactly at world forward 0 
    Transform target; 

    void Update() { 
     float circumference = 2 * Mathf.PI * distance; 
     angle = (procession % 1f) * circumference; 
     direction *= Quaternion.AngleAxis(Mathf.Rad2Deg * angle, Vector3.up); 
     Ray ray = new Ray(target.position, direction); 

     transform.position = ray.GetPoint(distance); 
     transform.LookAt(target); 
    } 
} 

С Input.GetAxis

using UnityEngine; 
using System.Collections; 

public class Follower : MonoBehaviour { 

    float distance = 10f; 
    Vector3 direction = Vector3.forward; 
    float speed = .01f; 
    Transform target; 

    void Update() { 
     direction *= Quaternion.AngleAxis(Input.GetAxis("Horizontal") * speed * Time.deltaTime, Vector3.up); 
     Ray ray = new Ray(target.position, direction); 

     transform.position = ray.GetPoint(distance); 
     transform.LookAt(target); 
    } 
} 
+0

Ни один из них не работал для меня, но у меня есть вторая работающая без части анимации, он просто появляется в нужном месте, когда вы указываете это направление на палочке, опубликует мой код –

+0

Как я уже сказал, havent проверил его, но я уверен, что решение находится внутри этого кода где-то с некоторыми незначительными корректировками;) – maksymiuk

+0

Да, это было очень полезно, спасибо :) Я все еще убираю его :) –

Смежные вопросы