Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
4 participantes
Página 1 de 1
Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NovoInimigo : MonoBehaviour {
Transform Player;
static Animator anim;
// Use this for initialization
void Start () {
anim =GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
Movendo ();
}
void Movendo(){
Player = GameObject.FindGameObjectWithTag ("Player").transform;
Vector3 direction = Player.position - this.transform.position;
float angle = Vector3.Angle (direction, this.transform.forward);
if (Vector3.Distance (Player.position, this.transform.position) < 100 && angle <300) {////Fazendo que o player qnd entrar no range de visao do Inimigo Olhar para o player
direction.y = 0;
this.transform.rotation = Quaternion.Slerp (this.transform.rotation, Quaternion.LookRotation (direction), 0.1f);////Fazendo que o player qnd entrar no range de visao do Inimigo Olhar para o player
anim.SetBool ("isIdle", false);
if (direction.magnitude > 5) {
this.transform.Translate (0, 0, 0.1f);
anim.SetBool ("isWalking", true);
anim.SetBool ("isAttacking", false);
} else {
anim.SetBool ("isAttacking", true);
anim.SetBool ("isWalking", false);
}
} else {
anim.SetBool ("isIdle", true);
anim.SetBool ("isWalking", false);
anim.SetBool ("isAttacking", false);
}
}
}
Então eu tenho um script onde um boneco procura um inimigo por uma tag q esteja em um range vai ate ele e bate mas o problema esta qnd eu tenho mais de um personagem,a animçao do atack nao sai e nem a de movimentaçao,exemplo 2 bonecos do player contra 2 do inimigo só um de cada time vai estar com as animaçoes corretas o restante ele se movimenta ate o inimigo mas fica statico sem fazer nd ent se alguem puder me ajudar ficaria grato
luizmauro123- Avançado
- PONTOS : 3078
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
- Código:
void Start(){
Player = GameObject.FindGameObjectWithTag ("Player").transform;
}
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
Infelizmente nao adiantou mais um exemplo eu tenho 5 personagem do player e 5 do inimigo só um do player e um do inimigo fica funcionando perfeita mente o restante eles vao se arrastando ate o inimigo e qnd chegam no lugar eles nao atacam
luizmauro123- Avançado
- PONTOS : 3078
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
Tem um sistema usando um tipo assim Faccao vou procurar nos meus scripts mais tarde e passo aqui.
Ele funciona assim ele checar o personagem ce a faccao for diferente ele e meu inimigo se for igual ele e meu amigo.
Ele funciona assim ele checar o personagem ce a faccao for diferente ele e meu inimigo se for igual ele e meu amigo.
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
Beleza aguardando a sua ajuda
luizmauro123- Avançado
- PONTOS : 3078
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
boa tarde galera tou com um problema na minha unity fui fazer um apk e minha net caiu e agora tudo ta dando erros no ads de recompensa ja fiz de tudo e ainda da erros
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
Hum vamos ver... Já que você ta tentando fazer tipo 5 inimigos contra 5 playersluizmauro123 escreveu:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NovoInimigo : MonoBehaviour {
Transform Player;
static Animator anim;
// Use this for initialization
void Start () {
anim =GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
Movendo ();
}
void Movendo(){
Player = GameObject.FindGameObjectWithTag ("Player").transform;
Vector3 direction = Player.position - this.transform.position;
float angle = Vector3.Angle (direction, this.transform.forward);
if (Vector3.Distance (Player.position, this.transform.position) < 100 && angle <300) {////Fazendo que o player qnd entrar no range de visao do Inimigo Olhar para o player
direction.y = 0;
this.transform.rotation = Quaternion.Slerp (this.transform.rotation, Quaternion.LookRotation (direction), 0.1f);////Fazendo que o player qnd entrar no range de visao do Inimigo Olhar para o player
anim.SetBool ("isIdle", false);
if (direction.magnitude > 5) {
this.transform.Translate (0, 0, 0.1f);
anim.SetBool ("isWalking", true);
anim.SetBool ("isAttacking", false);
} else {
anim.SetBool ("isAttacking", true);
anim.SetBool ("isWalking", false);
}
} else {
anim.SetBool ("isIdle", true);
anim.SetBool ("isWalking", false);
anim.SetBool ("isAttacking", false);
}
}
}
Então eu tenho um script onde um boneco procura um inimigo por uma tag q esteja em um range vai ate ele e bate mas o problema esta qnd eu tenho mais de um personagem,a animçao do atack nao sai e nem a de movimentaçao,exemplo 2 bonecos do player contra 2 do inimigo só um de cada time vai estar com as animaçoes corretas o restante ele se movimenta ate o inimigo mas fica statico sem fazer nd ent se alguem puder me ajudar ficaria grato
usa isso como exemplo
- Código:
public Transform[] Players //
public Transform PlayerSorteado // esse aqui é o objeto que o player vai seguir e matar;
void Awake () {
Players = GameObject.FindGameObjectsWithTag ("Player").transform;
PlayerSorteado = Random.Range(0, Players.Lenght);
}
void Movendo () {
Vector3 direction = PlayerSorteado.position - this.transform.position;
float angle = Vector3.Angle (direction, this.transform.forward);
}
assim deve funcionar
o jeito que você fez não ia funcionar de jeito nenhum
pois o seu inimigo ta seguindo o objeto com a tag " Player "
- Código:
Player = GameObject.FindGameObjectWithTag ("Player").transform;
ia dar erro : P
no meu exemplo
eu coloquei uma variável Players do tipo transform, ela também é do tipo lista
assim na void awake, ela ia listar todos os objetos com a tag player !
e nessa lista ele sortearia um player pro seu inimigo atacar
deve funcionar mude ai no seu script e ve se funciona
minha logica é essa, ela pode estar certa ou errada
EndStarsProgramming2- Membro
- PONTOS : 2653
REPUTAÇÃO : 5
Idade : 22
Áreas de atuação : Estudando C#
Respeito as regras :
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
agora se for online a logica é diferente
edit1 = obs esqueci o ; no final da variável Transform[] Players , Transform Player
EndStarsProgramming2- Membro
- PONTOS : 2653
REPUTAÇÃO : 5
Idade : 22
Áreas de atuação : Estudando C#
Respeito as regras :
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
O meu e um pouco parecido com o do amigo EndStarsProgramming2
em um script separado eu uso tanto para o player ou IA
em um script separado eu uso tanto para o player ou IA
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class CharacterStats : MonoBehaviour {
private CharacterController characterController { get { return GetComponent<CharacterController> (); } set { characterController = value; } }
private RagdollManager ragdollManager { get { return GetComponentInChildren<RagdollManager> (); } set { ragdollManager = value; } }
private Animator animator { get { return GetComponent<Animator> (); } set { animator = value; } }
private NavMeshAgent naveMesh { get { return GetComponent<NavMeshAgent> (); } set { naveMesh = value; } }
[Range(0, 100)] public float health = 100;
public static float healthAtual;
public ParticleSystem Sangue;
public int faction;
public MonoBehaviour[] scriptsToDisable;
void Start () {
healthAtual = health;
}
// Update is called once per frame
void Update () {
health = Mathf.Clamp (health, 0, 100);
}
public void Damage (float damage) {
health -= damage;
if (health <= 0) {
health = 0;
Die ();
}
}
void Die () {
characterController.enabled = false;
animator.enabled = false;
if (gameObject.CompareTag("Zumbie")){
naveMesh.enabled = false;
if (scriptsToDisable.Length == 0) {
Debug.Log ("All scripts still Die");
return;
}
}
foreach ( MonoBehaviour script in scriptsToDisable)
script.enabled = false;
if (ragdollManager !=null)
ragdollManager.Ragdoll();
}
}
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterMovement))]
[RequireComponent(typeof(CharacterStats))]
[RequireComponent(typeof(Animator))]
public class AI : MonoBehaviour {
private NavMeshAgent navmesh;
private CharacterMovement characterMove { get { return GetComponent<CharacterMovement> (); } set { characterMove = value; } }
private Animator animator { get { return GetComponent<Animator> (); } set { animator = value; } }
private CharacterStats characterStats { get { return GetComponent<CharacterStats> (); } set { characterStats = value; } }
private WeaponHandler weaponHandler {get{return GetComponent<WeaponHandler> ();} set {weaponHandler = value; }}
public enum AIState { Patrol, Attack,FindEnemy, FindCover }
public AIState aiState;
[System.Serializable]
public class PatrolSettings
{
public WaypointBase[] waypoints;
}
public PatrolSettings patrolSettings;
[System.Serializable]
public class SightSettings
{
public LayerMask sightLayers;
public float sightRange = 30f;
public float fieldOfView = 120f;
public float eyeheight;
}
public SightSettings sight;
[System.Serializable]
public class AttackSetting
{
public float fireChance = 0.1f;
}
public AttackSetting attack;
private float currentWaitTime;
private int waypointIndex;
private Transform currentLookTransform;
private bool walkingToDest;
private bool setDestination;
private bool reachedDestination;
private float forward;
private Transform target;
private Vector3 targetLastKnownPosition;
private CharacterStats[] allCharacters;
private bool aiming;
// Use this for initialization
void Start () {
navmesh = GetComponentInChildren<NavMeshAgent> ();
if (navmesh == null) {
Debug.LogError ("We need a navmesh to traverse the world with.");
enabled = false;
return;
}
if (navmesh.transform == this.transform) {
Debug.LogError ("The navmesh agent should be a child of the character: " + gameObject.name);
enabled = false;
return;
}
navmesh.speed = 0;
navmesh.acceleration = 0;
navmesh.autoBraking = false;
if (navmesh.stoppingDistance == 0) {
Debug.Log ("Auto settings stopping distance to 1.3f");
navmesh.stoppingDistance = 1.3f;
}
GetAllCharacters ();
}
void GetAllCharacters () {
allCharacters = GameObject.FindObjectsOfType<CharacterStats> ();
}
// Update is called once per frame
void Update () {
//TODO: Animate the strafe when the enemy is trying to shoot us.
characterMove.Animate (forward, 0);
navmesh.transform.position = transform.position;
weaponHandler.Aim (aiming);
LookForTarget ();
switch (aiState) {
case AIState.Patrol:
Patrol ();
break;
case AIState.Attack:
FireAtEnemy();
break;
}
}
void LookForTarget () {
if (allCharacters.Length > 0) {
foreach (CharacterStats c in allCharacters) {
if (c != characterStats && c.faction != characterStats.faction && c == ClosestEnemy()) {
RaycastHit hit;
Vector3 start = transform.position + (transform.up * sight.eyeheight);
Vector3 dir = (c.transform.position + c.transform.up) - start;
float sightAngle = Vector3.Angle (dir, transform.forward);
if (Physics.Raycast (start, dir, out hit, sight.sightRange, sight.sightLayers) &&
sightAngle < sight.fieldOfView && hit.collider.GetComponent<CharacterStats>()) {
target = hit.transform;
targetLastKnownPosition = Vector3.zero;
} else {
if (target != null) {
targetLastKnownPosition = target.position;
target = null;
}
}
}
}
}
}
CharacterStats ClosestEnemy () {
CharacterStats closestCharacter = null;
float minDistance = Mathf.Infinity;
foreach (CharacterStats c in allCharacters) {
if (c != characterStats && c.faction != characterStats.faction) {
float distToCharacter = Vector3.Distance (c.transform.position, transform.position);
if (distToCharacter < minDistance) {
closestCharacter = c;
minDistance = distToCharacter;
}
}
}
return closestCharacter;
}
void Patrol () {
if (target == null){
PatrolBehaviour();
if (!navmesh.isOnNavMesh) {
Debug.Log ("We're off the navmesh");
return;
}
if (patrolSettings.waypoints.Length == 0)
return;
if (!setDestination) {
navmesh.SetDestination (patrolSettings.waypoints [waypointIndex].destination.position);
setDestination = true;
}
if ((navmesh.remainingDistance <= navmesh.stoppingDistance) || reachedDestination && !navmesh.pathPending) {
setDestination = false;
walkingToDest = false;
forward = LerpSpeed (forward, 0, 15);
currentWaitTime -= Time.deltaTime;
if (patrolSettings.waypoints [waypointIndex].lookAtTarget != null)
currentLookTransform = patrolSettings.waypoints [waypointIndex].lookAtTarget;
if (currentWaitTime <= 0) {
waypointIndex = (waypointIndex + 1) % patrolSettings.waypoints.Length;
reachedDestination = false;
} else {
reachedDestination = true;
}
} else {
LookAtPosition (navmesh.steeringTarget);
walkingToDest = true;
forward = LerpSpeed (forward, 0.5f, 15);
currentWaitTime = patrolSettings.waypoints [waypointIndex].waitTime;
currentLookTransform = null;
}
} else {
//FIXIME: Get in cover if we need to.
aiState = AIState.Attack;
}
}
void FireAtEnemy (){
if (target!= null){
AttackBehaviour();
LookAtPosition (target.position);
Vector3 start = transform.position + transform.up;
Vector3 dir = target.position - transform.position;
Ray ray = new Ray (start,dir);
if(Random.value <= attack.fireChance)
weaponHandler.FireCurrentWeapon (ray);
}
}
float LerpSpeed (float curSpeed, float destSpeed, float time) {
curSpeed = Mathf.Lerp (curSpeed, destSpeed, Time.deltaTime * time);
return curSpeed;
}
void LookAtPosition (Vector3 pos) {
Vector3 dir = pos - transform.position;
Quaternion lookRot = Quaternion.LookRotation (dir);
lookRot.x = 0;
lookRot.z = 0;
transform.rotation = Quaternion.Lerp (transform.rotation, lookRot, Time.deltaTime * 5);
}
void OnAnimatorIK () {
if (currentLookTransform != null && !walkingToDest) {
animator.SetLookAtPosition (currentLookTransform.position);
animator.SetLookAtWeight (1, 0, 0.5f, 0.7f);
}else if (target != null){
float dist = Vector3.Distance (target.position,transform.position + transform.right * 0.3f);
if (dist > 3) {
animator.SetLookAtPosition (target.transform.position + transform.right * 0.3f);
animator.SetLookAtWeight (1, 1, 0.3f, 0.2f);
}else{
// FIXIME: Make a smooth transition to new lookAtPosition
animator.SetLookAtPosition (target.transform.position + target.up + transform.right * 0.3f);
animator.SetLookAtWeight (1, 1, 0.3f, 0.2f);
}
}
}
void PatrolBehaviour () {
aiming = false;
}
void AttackBehaviour () {
aiming = true;
walkingToDest = false;
setDestination = false;
reachedDestination = false;
currentLookTransform = null;
forward = LerpSpeed(forward,0,15);
}
}
[System.Serializable]
public class WaypointBase
{
public Transform destination;
public float waitTime;
public Transform lookAtTarget;
}
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
No script CharacterStats coloquei para desativar o naveMesh kkkk depois deles morrerem ele ficavam movendo-se.
No script AI.
Em GetAllCharacters ele procura todos.
Em LookForTarget ele checar se e ou nao diferente.
Em CharacterStats ClosestEnemy meus inimigos, ai ele escolher um e atira.
Dependendo do seu jogo voce pode usar outra funçao para se o personagem estiver morto ele atualiza a verificaçao e procura outro
No script AI.
Em GetAllCharacters ele procura todos.
Em LookForTarget ele checar se e ou nao diferente.
Em CharacterStats ClosestEnemy meus inimigos, ai ele escolher um e atira.
Dependendo do seu jogo voce pode usar outra funçao para se o personagem estiver morto ele atualiza a verificaçao e procura outro
Re: Ola eu estou com um bug em um script meu e nao sei o pq disso acontecer
No script CharacterStats coloquei para desativar o naveMesh kkkk depois deles morrerem ele ficavam movendo-se.
No script AI.
Em GetAllCharacters ele procura todos.
Em LookForTarget ele checar se e ou nao diferente.
Em CharacterStats ClosestEnemy meus inimigos, ai ele escolher um e atira.
Dependendo do seu jogo voce pode usar outra funçao para se o personagem estiver morto ele atualiza a verificaçao e procura outro
No script AI.
Em GetAllCharacters ele procura todos.
Em LookForTarget ele checar se e ou nao diferente.
Em CharacterStats ClosestEnemy meus inimigos, ai ele escolher um e atira.
Dependendo do seu jogo voce pode usar outra funçao para se o personagem estiver morto ele atualiza a verificaçao e procura outro
Tópicos semelhantes
» Estou com problema com um script que está dando erro.
» COMO DESATIVAR UM DETERMINADO SCRIPT QUANDO ALGO ACONTECER
» ESTOU COM UM PROBLEMA EM UM SCRIPT
» Script que mostre quem matou mais (estou disposto a pagar)
» [RESOLVIDO] ESTOU PRECISANDO DE UMA AJUDA COM UM SCRIPT
» COMO DESATIVAR UM DETERMINADO SCRIPT QUANDO ALGO ACONTECER
» ESTOU COM UM PROBLEMA EM UM SCRIPT
» Script que mostre quem matou mais (estou disposto a pagar)
» [RESOLVIDO] ESTOU PRECISANDO DE UMA AJUDA COM UM SCRIPT
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos