Trocar Position Por Rotation
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Trocar Position Por Rotation
ola glr, eu estou usando o seguinte script para controlar minha camera via joystick mas em vez desse script fazer a minha camera girar ele faz ela andar, como eu corrijo isso?
Scrip da camera:
Script do Joystick:
Scrip da camera:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraJoy : MonoBehaviour {
private const float Y_ANGLE_MIN = 0.0f;
private const float Y_ANGLE_MAX = 180.0f;
public VirtualJoystick Joystick { set; get; }
private Transform thisTransform;
private Camera cam;
public Transform CamTransform{ set; get; }
private float distance = 10.0f;
private float currentX = 0.0f;
private float currentY = 0.0f;
private float sensivityX = 4.0f;
private float sensivityY = 1.0f;
void Start () {
CamTransform = new GameObject ("Camera Container").transform;
cam = CamTransform.gameObject.AddComponent<Camera> ();
cam.tag = "Main Camera";
thisTransform = transform;
}
void Update () {
currentX += Joystick.Horizontal () * sensivityX;
currentY += Joystick.Vertical () * sensivityY;
currentY = ClampAngle (currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
}
private void LateUpdate () {
Vector3 dir = new Vector3 (0, 0, -distance);
Quaternion rotation = Quaternion.Euler (currentY, currentX, 0);
CamTransform.position = thisTransform.position + rotation * dir;
CamTransform.LookAt (thisTransform.position);
}
private float ClampAngle (float angle, float min, float max) {
do {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
} while (angle < -360 || angle > 360);
return Mathf.Clamp (angle, min, max);
}
}
Script do Joystick:
- Código:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler {
private Image bgImg;
private Image joystickImg;
private Vector3 inputVector;
public GameObject player;
public float speed;
private void Start(){
bgImg = GetComponent<Image> ();
joystickImg = transform.GetChild (0).GetComponent<Image> ();
}
public virtual void OnDrag(PointerEventData ped){
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle (bgImg.rectTransform
, ped.position
, ped.pressEventCamera
, out pos))
{
pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);
inputVector = new Vector3(pos.x*3,0, pos.y*3);
inputVector = (inputVector.magnitude > 1.0f)?inputVector.normalized:inputVector;
// Move Joystick IMG
joystickImg.rectTransform.anchoredPosition =
new Vector3(inputVector.x * (bgImg.rectTransform.sizeDelta.x/3)
,inputVector.z * (bgImg.rectTransform.sizeDelta.y/3));
}
}
public virtual void OnPointerDown(PointerEventData ped){
OnDrag (ped);
}
public virtual void OnPointerUp(PointerEventData ped){
inputVector = Vector3.zero;
joystickImg.rectTransform.anchoredPosition = Vector3.zero;
}
void Update(){
if (joystickImg.transform.localPosition.x > 20) {
player.transform.Translate(Vector3.right * speed * Time.deltaTime);
}
if (joystickImg.transform.localPosition.x < -20) {
player.transform.Translate(Vector3.left * speed * Time.deltaTime);
}
if (joystickImg.transform.localPosition.y > 20) {
player.transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if (joystickImg.transform.localPosition.y < -20) {
player.transform.Translate(Vector3.back * speed * Time.deltaTime);
}
}
public float Horizontal (){
if (inputVector.x != 0)
return inputVector.x;
else
return Input.GetAxis ("Horizontal");
}
public float Vertical (){
if (inputVector.z != 0)
return inputVector.z;
else
return Input.GetAxis ("Vertical");
}
}
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Re: Trocar Position Por Rotation
eu queria fazer alguma coisa que essa camera sempre ficasse olhado pro carro e orbitasse
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Re: Trocar Position Por Rotation
a variável thisTransform e carro ?
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Trocar Position Por Rotation
tente isso
- Código:
public Transform target; // Objeto em que ele vai girar em torno
[Range(0, 20)]
public float maxDistance = 15,
minDistance = 3,
startDistance = 7;
[Range(0, 200)]
public float velocity = 20;
[Range(0, 5)]
public float sensitivity = 1.0f,
zoomSensitivity = 1.0f;
public Vector3 offsetTarget;
private float x, y;
private Vector3 offset;
public VirtualJoystick Joystick { set; get; }
void Start()
{
offset = new Vector3(0.0f, 0.0f, -startDistance);
x = transform.localEulerAngles.x;
y = transform.localEulerAngles.y;
Rotate();
}
void LateUpdate()
{
Rotate();
}
void Rotate()
{
if (Input.GetMouseButton(0))
{
x += Joystick.Horizontal() * sensitivity;
y += Joystick.Vertical() * sensitivity;
y = Mathf.Clamp(y, -5 + Mathf.Abs(offset.z) / 3, 46.5f);
}
Quaternion rotation = Quaternion.Euler(y, x, 0.0f);
Vector3 position = rotation * offset + (target.position + offsetTarget);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, velocity * Time.fixedDeltaTime);
transform.position = Vector3.Lerp(transform.position, position, velocity * Time.fixedDeltaTime);
}
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Trocar Position Por Rotation
esse script vai direto na câmera
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Trocar Position Por Rotation
resolvi :lol!:
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Re: Trocar Position Por Rotation
mas a camera não gira
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Re: Trocar Position Por Rotation
você setou o script VirtualJoystick na variável Joystick do script da câmera ?
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Trocar Position Por Rotation
ela não aparece no inspector
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Re: Trocar Position Por Rotation
apaguei aquele " { set; get; }" e deu certo agr
HeF Soft- Membro
- PONTOS : 2849
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» Duvida com Transform.position
» Quaternion Rotation
» Duvida com o transform.rotation
» root transform rotation (usa saga para orientar um personagem)
» Fiz o personagem seguir o player, mas ele vira usando o rotation.z. Não sei como arrumar
» Quaternion Rotation
» Duvida com o transform.rotation
» root transform rotation (usa saga para orientar um personagem)
» Fiz o personagem seguir o player, mas ele vira usando o rotation.z. Não sei como arrumar
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos