Koddaki hata nedir?

using UnityEngine;
using System.Collections;

public class DüğünDurma : MonoBehaviour
{
public Animator[] animators;
public float rotationSpeed = 5f;

void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
foreach (Animator anim in animators)
{
anim.speed = 0;
}

LookAtPlayer();
}
}

void LookAtPlayer()
{
Transform playerTransform = GameObject.FindWithTag("Player").transform;

foreach (Animator anim in animators)
{
StartCoroutine(RotateToFace(anim.transform, playerTransform));
}
}

IEnumerator RotateToFace(Transform character, Transform player)
{
while (Quaternion.Angle(character.rotation, player.rotation) > 0.1f)
{
character.rotation = Quaternion.Slerp(character.rotation, player.rotation, rotationSpeed * Time.deltaTime);
yield return null;
}
}

void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
foreach (Animator anim in animators)
{
anim.speed = 1;
}
}
}
}
 
Öncelikle kodunuz pek temiz değil, sizin için biraz daha temiz bir hale getirdim

Kod:
using UnityEngine;
using System.Collections;

public class DüğünDurma : MonoBehaviour
{
    public List<EnemyScript> enemyList; // Dusmanlari burada listeye ata
    public float rotationSpeed = 5f;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            foreach (var item in enemyList)
            {
                item.StopAnim(); // Dusmanlarin oldugu scriptte StopAnim diye bir fonksiyon olusturman lazim
            }    
        }
    }
    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
           foreach (var item in enemyList)
            {
                item.StartAnim(); // Usttekinin aynisi ama bu sefer animasyon baslatacak kod
            }    
        }
    }
}

Bunun dışında enemy ya da diğer karakterlerin olduğu scripte de bunu yazmanız gerekiyor

Kod:
using UnityEngine;
using System.Collections;

public class EnemyScript : MonoBehaviour
{
    public PlayerScript mainPlayer; // Burada player tanimlanmal
    public float rotationSpeed = 5f;
    public Animator anim;
    bool rotateToPlayer;
    float rotateCounter;
    Quaternion startRot,targetRot;

    private void Update()
    {
        if (rotateToPlayer)
        {
            rotateCounter += time.DeltaTime * 5;
            tranform.rotation = Vector3.Lerp(startRot,targetRot,rotateCounter);
            if (rotateCounter>1)
            {
                rotateToPlayer = false;
            }
        }
    }
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            foreach (var item in enemyList)
            {
                item.StopAnim(); // Dusmanlarin oldugu scriptte StopAnim diye bir fonksiyon olusturman lazim
            }    
        }
    }
    public void StartAnim()
    {
        anim.SetTrigger("walk"); // Burada animasyon tetiklenmeli
    }
        public void StopAnim()
    {
        anim.SetTrigger("Idle"); // Burada animasyon default olmali
        rotateToPlayer = true;
        rotateCounter = 0;
        targetRot = mainPlayer.tranform.rotation; // bu fonksiyon basladigi anda karakterin pozisyonuna bakar, eger karakter surekli hareket edecekse update icindeki rotate player icinde bunu tekrar tanimlaman gerekir
        startRot = transform.rotation;
    }
}

İstediğiniz şeyin en basit ve en temiz hali bu. Eğer kodda anlamadığınız yerler varsa o kısma çalışmanızı, onun derslerinizi izlemenizi tavsiye ederim.
Alternatif olarak da ana karakteri singleton yapmanızı tavsiye ederim. Onu da biraz araştırmayla öğrenirsiniz
 
Öncelikle kodunuz pek temiz değil, sizin için biraz daha temiz bir hale getirdim

Kod:
using UnityEngine;
using System.Collections;

public class DüğünDurma : MonoBehaviour
{
    public List<EnemyScript> enemyList; // Dusmanlari burada listeye ata
    public float rotationSpeed = 5f;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            foreach (var item in enemyList)
            {
                item.StopAnim(); // Dusmanlarin oldugu scriptte StopAnim diye bir fonksiyon olusturman lazim
            }   
        }
    }
    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
           foreach (var item in enemyList)
            {
                item.StartAnim(); // Usttekinin aynisi ama bu sefer animasyon baslatacak kod
            }   
        }
    }
}

Bunun dışında enemy ya da diğer karakterlerin olduğu scripte de bunu yazmanız gerekiyor

Kod:
using UnityEngine;
using System.Collections;

public class EnemyScript : MonoBehaviour
{
    public PlayerScript mainPlayer; // Burada player tanimlanmal
    public float rotationSpeed = 5f;
    public Animator anim;
    bool rotateToPlayer;
    float rotateCounter;
    Quaternion startRot,targetRot;

    private void Update()
    {
        if (rotateToPlayer)
        {
            rotateCounter += time.DeltaTime * 5;
            tranform.rotation = Vector3.Lerp(startRot,targetRot,rotateCounter);
            if (rotateCounter>1)
            {
                rotateToPlayer = false;
            }
        }
    }
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            foreach (var item in enemyList)
            {
                item.StopAnim(); // Dusmanlarin oldugu scriptte StopAnim diye bir fonksiyon olusturman lazim
            }   
        }
    }
    public void StartAnim()
    {
        anim.SetTrigger("walk"); // Burada animasyon tetiklenmeli
    }
        public void StopAnim()
    {
        anim.SetTrigger("Idle"); // Burada animasyon default olmali
        rotateToPlayer = true;
        rotateCounter = 0;
        targetRot = mainPlayer.tranform.rotation; // bu fonksiyon basladigi anda karakterin pozisyonuna bakar, eger karakter surekli hareket edecekse update icindeki rotate player icinde bunu tekrar tanimlaman gerekir
        startRot = transform.rotation;
    }
}

İstediğiniz şeyin en basit ve en temiz hali bu. Eğer kodda anlamadığınız yerler varsa o kısma çalışmanızı, onun derslerinizi izlemenizi tavsiye ederim.
Alternatif olarak da ana karakteri singleton yapmanızı tavsiye ederim. Onu da biraz araştırmayla öğrenirsiniz
1. scriptte Enemy script diye bir şey olmadığı için hata veriyor
Assets\Çakmaduvar.cs(7,17): error CS0246: The type or namespace name 'EnemyScript' could not be found (are you missing a using directive or an assembly reference?)
2. scriptte de PlayerScript olmadığı için hata veriyor
Assets\Çakmaduvar.cs(7,12): error CS0246: The type or namespace name 'PlayerScript' could not be found (are you missing a using directive or an assembly reference?)

Using unityengine;
Using System. Collections;

Public class düğündurma: Monobehaviour.
{
Public animator[] animators;
Public float rotationspeed = 5F;

Void ontriggerenter(collider other)
{
İf (other.comparetag("Player"))
{
Foreach (animator anim in animators)
{
Anim. Speed = 0;
}

LookAtPlayer();
}
}

Void LookAtPlayer()
{
Transform playertransform = gameobject. Findwithtag("Player").transform;

Foreach (animator anim in animators)
{
Startcoroutine(rotatetoface(anim. Transform, playertransform));
}
}

Ienumerator rotatetoface(transform character, transform Player)
{
While (quaternion. Angle(character. Rotation, Player. Rotation) > 0.1F)
{
Character. Rotation = quaternion. Slerp(character. Rotation, Player. Rotation, rotationspeed * time. Deltatime);
Yield return null;
}
}

Void ontriggerexit(collider other)
{
İf (other.comparetag("Player"))
{
Foreach (animator anim in animators)
{
Anim. Speed = 1;
}
}
}
}

Bayağı denediniz çok teşekkür ederim ama benim yazdığım kodla aynı sonuca ulaştı ne yazık ki.
 
1. scriptte Enemy script diye bir şey olmadığı için hata veriyor
Assets\Çakmaduvar.cs(7,17): error CS0246: The type or namespace name 'EnemyScript' could not be found (are you missing a using directive or an assembly reference?)
2. scriptte de PlayerScript olmadığı için hata veriyor
Assets\Çakmaduvar.cs(7,12): error CS0246: The type or namespace name 'PlayerScript' could not be found (are you missing a using directive or an assembly reference?)



Bayağı denediniz çok teşekkür ederim ama benim yazdığım kodla aynı sonuca ulaştı ne yazık ki.
Hocam işte oradaki sizin scriptlerinizin ismini bilemediğim için öyle yazdım. Siz o enemyscript yerine diğer karakterlerdeki scriptin adı neyse onu yazmanız gerekir
 

Technopat Haberler

Geri
Yukarı