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;
}
}
}
}
GPT'ye sordum bunları verdi
sorunlar:
- animasyonun durmaması:anim. Speed = 0; animasyonu durdurur ama sadece o an oynuyorsa. Eğer animasyonun Loop'u kapalıysa ve bitmişse, zaten durmuştur. Bazı animasyonlar zaten son pozisyonuna gelip durmuş olabilir. Bu yüzden farklı davranıyor olabilirler.
- dönme yönü yanlış:kodda character. Rotation = quaternion. Slerp(character. Rotation, Player. Rotation...) Yapıyorsun ama burada karakterin direkt oyuncunun rotation'ına dönmesini değil, oyuncuya bakacak şekilde dönmesini istiyoruz.
- lookatplayer fonksiyonu tetiklenmiyor olabilir:LookAtPlayer() çağrısı foreach döngüsünün içinde, bu yüzden sadece ilk karakter için çağrılıyor olabilir.
Using unityengine;
Using System. Collections;
Public class düğündurma: Monobehaviour.
{
Public animator[] animators;
Public float rotationspeed = 5F;
Private bool hastriggered = false;
Void ontriggerenter(collider other)
{
İf (!hastriggered && other.comparetag("Player"))
{
Hastriggered = true;
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)
{
Vector3 direction = (Player. Position - character. Position).normalized;
Direction. Y = 0F; // yükseklik farkını yok saymak için.
Quaternion lookrotation = quaternion. Lookrotation(direction);
While (quaternion. Angle(character. Rotation, lookrotation) > 0.1F)
{
Character. Rotation = quaternion. Slerp(character. Rotation, lookrotation, rotationspeed * time. Deltatime);
Yield return null;
}
}
Void ontriggerexit(collider other)
{
İf (other.comparetag("Player"))
{
Hastriggered = false;
Foreach (animator anim in animators)
{
Anim. Speed = 1;
}
}
}
}
ekstra kontroller:
- animator'ların hepsi doğru şekilde atanmış mı? empty Gameobject'e bu Script'i attıktan sonra animators dizisine Inspector'dan tüm karakterlerin animator Component'larını sürükleyip bırakman gerekiyor.
- box Collider'ın ıs trigger kutusu işaretli mi?
- Player nesnesinin Tag'i gerçekten Player mı?
GPT'ye sordum bunları verdi
sorunlar:
- animasyonun durmaması:anim. Speed = 0; animasyonu durdurur ama sadece o an oynuyorsa. Eğer animasyonun Loop'u kapalıysa ve bitmişse, zaten durmuştur. Bazı animasyonlar zaten son pozisyonuna gelip durmuş olabilir. Bu yüzden farklı davranıyor olabilirler.
- dönme yönü yanlış:kodda character. Rotation = quaternion. Slerp(character. Rotation, Player. Rotation...) Yapıyorsun ama burada karakterin direkt oyuncunun rotation'ına dönmesini değil, oyuncuya bakacak şekilde dönmesini istiyoruz.
- lookatplayer fonksiyonu tetiklenmiyor olabilir:LookAtPlayer() çağrısı foreach döngüsünün içinde, bu yüzden sadece ilk karakter için çağrılıyor olabilir.
C#:using UnityEngine; using System.Collections; public class DüğünDurma : MonoBehaviour. { public Animator[] animators; public float rotationSpeed = 5f; private bool hasTriggered = false; void OnTriggerEnter(Collider other) { if (!hasTriggered && other.CompareTag("Player")) { hasTriggered = true; 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) { Vector3 direction = (player.position - character.position).normalized; direction.y = 0f; // Yükseklik farkını yok saymak için. Quaternion lookRotation = Quaternion.LookRotation(direction); while (Quaternion.Angle(character.rotation, lookRotation) > 0.1f) { character.rotation = Quaternion.Slerp(character.rotation, lookRotation, rotationSpeed * Time.deltaTime); yield return null; } } void OnTriggerExit(Collider other) { if (other.CompareTag("Player")) { hasTriggered = false; foreach (Animator anim in animators) { anim.speed = 1; } } } }
ekstra kontroller:
- animator'ların hepsi doğru şekilde atanmış mı? empty Gameobject'e bu Script'i attıktan sonra animators dizisine Inspector'dan tüm karakterlerin animator Component'larını sürükleyip bırakman gerekiyor.
- box Collider'ın ıs trigger kutusu işaretli mi?
- Player nesnesinin Tag'i gerçekten Player mı?
Bu olmadı ne yazık ki.
Bu olmadı ne yazık ki.
Süslü parantez olmuyor mu kodlarda.
Kanka yapay zeka cevapları olmamalı forumda.
Lütfen düzelt.
public class DüğünDurma : MonoBehaviourAdam yardım etmeye çalışmış, okuduğum Technopat kurallarında böyle şeyler yoktu.
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;
}
}
}
}
Assets\Çakmaduvar.cs(31,5): error CS0246: The type or namespace name 'ıenumerator' could not be found (are you missing a using directive or an Assembly reference?)
Böyle hata var.
Büyük ı ile başlamak zorunda sanırım onu düzeltip dener misin?