C# Script de Camera
3 participantes
Página 1 de 1
C# Script de Camera
Olá a todos, gostaria de uma ajuda, estou trabalhando em um jogo 2D, com camera ortografica, porém estou com uma dificuldade, gostaria de quando o player ficasse parado a camera desse uma leve aproximada nele (mudança de size) e quando ele voltasse a se movimentar, a camera voltasse à distancia normal, logico que com um delay... supor uns 5 segundos para este comando acontecer. No caso me refiro à main camera. Obrigado a todos que puderem ajudar.
Teio- Iniciante
- PONTOS : 2343
REPUTAÇÃO : 0
Respeito as regras :
Re: C# Script de Camera
Tente usar o lerp, assim:
Esse script vai funcionar se você está movendo seu personagem através do rigidbody, caso não, use outra validação para saber se o objeto está se movendo ou não.
- Código:
public float sizeStart, newSize, timeSmooth;
private Rigidbody rb;
private bool isWalking;
void Start(){
Camera.main.orthographic = true;
sizeStart = Camera.main.orthographicSize;
rb = GetComponent<Rigidbody>();
}
void Update(){
isWalking = rb.velocity != Vector3.zero;
}
void LateUpdate(){
if (isWalking)
Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, sizeStart, timeSmooth*Time.deltaTime);
else
Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, newSize, timeSmooth*Time.deltaTime);
}
Esse script vai funcionar se você está movendo seu personagem através do rigidbody, caso não, use outra validação para saber se o objeto está se movendo ou não.
Última edição por MayLeone em Qui Jul 19, 2018 8:04 pm, editado 1 vez(es)
Re: C# Script de Camera
Desculpa minha ignorância..... mas o que estou fazendo de errado?
https://drive.google.com/file/d/1KHrSdmJv1YHiWjOFDJW04IKvo0N_qs1w/view?usp=sharing
https://drive.google.com/file/d/1KHrSdmJv1YHiWjOFDJW04IKvo0N_qs1w/view?usp=sharing
Teio- Iniciante
- PONTOS : 2343
REPUTAÇÃO : 0
Respeito as regras :
Re: C# Script de Camera
Faça o code assim, com algumas correções:
- Código:
public float sizeStart, newSize, timeSmooth;
private Rigidbody rb;
private bool isWalking;
void Start(){
Camera.main.orthographic = true;
sizeStart = Camera.main.orthographicSize;
rb = GetComponent<Rigidbody>();
}
void Update(){
isWalking = rb.velocity != Vector3.zero;
}
void LateUpdate(){
if (isWalking)
Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, sizeStart, timeSmooth*Time.deltaTime);
else
Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, newSize, timeSmooth*Time.deltaTime);
}
Re: C# Script de Camera
Não consegui fazer esse efeito de orthographicsize..... mas agora estou com outro problema..... minha camera está seguindo meu player com o efeito smooth, porém quero colocar um limite na camera em eixo X e Y, quando ativo esta bool ele cancela o smooth. Alguma solução?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera : MonoBehaviour {
private Vector2 velocity;
public Transform target;
public Vector2 smoothTime;
public Vector2 maxLimit;
public Vector2 minLimit;
public bool MaxMin;
public float xMin;
public float yMin;
public float xMax;
public float yMax;
void Start()
{
transform.position = new Vector3(target.position.x, target.position.y, target.position.z);
}
void Update()
{
if (target != null)
{
float posX = Mathf.SmoothDamp(transform.position.x, target.position.x, ref velocity.x, smoothTime.x);
float posY = Mathf.SmoothDamp(transform.position.y, target.position.y, ref velocity.y, smoothTime.y);
transform.position = new Vector3(posX, posY, -10);
}
if (MaxMin)
{
transform.position = new Vector3(Mathf.Clamp(target.position.x, xMin, xMax), Mathf.Clamp(target.position.y, yMin, yMax));
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera : MonoBehaviour {
private Vector2 velocity;
public Transform target;
public Vector2 smoothTime;
public Vector2 maxLimit;
public Vector2 minLimit;
public bool MaxMin;
public float xMin;
public float yMin;
public float xMax;
public float yMax;
void Start()
{
transform.position = new Vector3(target.position.x, target.position.y, target.position.z);
}
void Update()
{
if (target != null)
{
float posX = Mathf.SmoothDamp(transform.position.x, target.position.x, ref velocity.x, smoothTime.x);
float posY = Mathf.SmoothDamp(transform.position.y, target.position.y, ref velocity.y, smoothTime.y);
transform.position = new Vector3(posX, posY, -10);
}
if (MaxMin)
{
transform.position = new Vector3(Mathf.Clamp(target.position.x, xMin, xMax), Mathf.Clamp(target.position.y, yMin, yMax));
}
}
}
Teio- Iniciante
- PONTOS : 2343
REPUTAÇÃO : 0
Respeito as regras :
Re: C# Script de Camera
você está setando a posição diretamente no vetor e fazendo smooth antes. Faça uma interpolação diretamente no transform.position, ai vai ter Smooth sempre
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera : MonoBehaviour {
public Transform target;
public float speed = 2;
public bool min_max = true;
public Vector2 x_MinMax = new Vector2 (-10, 10);
public Vector2 y_MinMax = new Vector2 (-10, 10);
Vector3 newPosition;
void Start(){
transform.position = new Vector3(target.position.x, target.position.y, target.position.z);
}
void Update(){
if (target != null){
newPosition = new Vector3 (target.position.x, target.position.y, -10);
if (min_max) {
newPosition = new Vector3 (Mathf.Clamp (newPosition.x, x_MinMax.x, x_MinMax.y), Mathf.Clamp (newPosition.y, y_MinMax.x, y_MinMax.y), -10);
}
transform.position = Vector3.Lerp (transform.position, newPosition, Time.deltaTime*speed);
}
}
}
Tópicos semelhantes
» No script da "Câmera estilo Gta" como faço para o mouse mover a câmera ?
» Script de player - camera bugada - Photon
» SCRIPT DE MOVIMENTAÇÃO E CÂMERA
» Simple Touch Camera Script
» Script de movimentação e câmera não executa corretamente
» Script de player - camera bugada - Photon
» SCRIPT DE MOVIMENTAÇÃO E CÂMERA
» Simple Touch Camera Script
» Script de movimentação e câmera não executa corretamente
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos