Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想让敌人在产卵时看着玩家_C#_Unity3d - Fatal编程技术网

C# 我想让敌人在产卵时看着玩家

C# 我想让敌人在产卵时看着玩家,c#,unity3d,C#,Unity3d,Unity不会让我将“转换目标”设置为玩家,直到游戏中存在敌人。我该怎么做才能让它自动瞄准玩家而不需要通过unity指定目标?这是我的密码 using UnityEngine; public class PawnRotate : MonoBehaviour { //public Transform target; public Transform target; public float speed = 3f; private void Start()

Unity不会让我将“转换目标”设置为玩家,直到游戏中存在敌人。我该怎么做才能让它自动瞄准玩家而不需要通过unity指定目标?这是我的密码

using UnityEngine;

public class PawnRotate : MonoBehaviour
{
    //public Transform target;
    public Transform target;
    public float speed = 3f;

    private void Start()
    {
        if (Vector3.Distance(transform.position, target.position) > 1f)
        {
            RotateTowards(target.position);
            target = GameObject.FindObjectOfType<Player>().transform;
        }
    }


    private void RotateTowards(Vector2 target)
    {
        var offset = 90f;
        Vector2 direction = target - (Vector2)transform.position;
        direction.Normalize();
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(Vector3.forward * (angle + offset));
    }
}
使用UnityEngine;
公共类典当行:单一行为
{
//公共转型目标;
公共转型目标;
公共浮动速度=3f;
私有void Start()
{
if(矢量3.距离(变换位置、目标位置)>1f)
{
旋转方向(目标位置);
target=GameObject.FindObjectOfType().transform;
}
}
私有空间旋转方向(矢量2目标)
{
var偏移=90f;
Vector2方向=目标-(Vector2)变换位置;
方向。规范化();
浮动角度=数学Atan2(方向y,方向x)*数学Rad2Deg;
transform.rotation=Quaternion.Euler(Vector3.forward*(角度+偏移));
}
}

有很多方法可以做到这一点。
基本上,您需要通过代码找到玩家的游戏对象(或转换)

按标签
如果你的玩家有一个标签,你可以使用
GameObject.FindGameObjectsWithTag
()找到它

private void Start()
{
    target = GameObject.FindGameObjectsWithTag("Player").transform; // "Player" should be your player tag
}
private void Start()
{
    target = GameObject.FindObjectOfType<Player>().transform; // "Player" should be your player MonoBehaviour script
}
通过脚本
如果您的玩家有一个唯一的脚本,您可以使用
GameObject.FindObjectOfType
()来查找它

private void Start()
{
    target = GameObject.FindGameObjectsWithTag("Player").transform; // "Player" should be your player tag
}
private void Start()
{
    target = GameObject.FindObjectOfType<Player>().transform; // "Player" should be your player MonoBehaviour script
}
private void Start()
{
target=GameObject.FindObjectOfType().transform;//“Player”应该是您的玩家脚本
}
还有其他方法可以做到这一点。
例如:使用Singleton,某种类型的游戏控制器,它有一个对玩家的引用,等等


PS:这两种方式都希望播放器对象已经在场景中

Hi,欢迎使用堆栈溢出。这回答了你的问题吗?或或者在生成敌人实例的脚本中指定它实际上你只需要使用
四元数。LookRotation
与你试图面对的对象的相对位置@OmarAbdelBari尽管使用了此代码,我仍然面临同样的问题。生成的对象的预设需要我通过unity来阐明变换目标。但是,尝试时没有选项可供选择。如果游戏对象尚未在场景中(通过编辑器),则需要在运行时对其进行设置。玩家对象在场景中,但仍不起作用。我照你说的做了,但它仍然在寻找一个“变换”,而不是一个游戏对象“玩家”。你选择了哪种方法?你能发布你的新代码吗?我两个都试过了。代码已更新。您是说您在请求转换而不是游戏对象时遇到问题吗?Unity中的层次结构是基于变换的,应该没有问题。您还可以通过
gameobject
(可能是
gameobject
)属性访问转换的游戏对象。@JasonTrager您正在使用后尝试查找目标。它应该是启动方法中的第一件事。你在玩家游戏对象上附加了一个玩家脚本,对吗?