Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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

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
Unity 3D如何设置炮塔自动瞄准?C#_C#_Unity3d - Fatal编程技术网

Unity 3D如何设置炮塔自动瞄准?C#

Unity 3D如何设置炮塔自动瞄准?C#,c#,unity3d,C#,Unity3d,我不想达到的是让我的脚轮旋转并跟随一个“敌人” 目前它发现了敌人,但它没有旋转,我不知道为什么 子弹是我拖进去的预制件,一定有更好的方法吗?有人有什么建议吗 目前子弹从未触发,但原木射出并…旋转不起作用 这是我的 using UnityEngine; using System.Collections; public class TurretController : MonoBehaviour { public Rigidbody bulletPrefab; private T

我不想达到的是让我的脚轮旋转并跟随一个“敌人”

目前它发现了敌人,但它没有旋转,我不知道为什么

子弹是我拖进去的预制件,一定有更好的方法吗?有人有什么建议吗

目前子弹从未触发,但原木射出并…旋转不起作用

这是我的

using UnityEngine;
using System.Collections;

public class TurretController : MonoBehaviour {

    public Rigidbody bulletPrefab;
    private Transform target;
    private GameObject bullet;
    private float nextFire;
    private Quaternion targetPos;

    void OnTriggerEnter(Collider otherCollider) {
        if (otherCollider.CompareTag("Enemy"))
        {
            Debug.Log ("in");
            target = otherCollider.transform;
            StartCoroutine ("Fire");
        }
    }

    void  OnTriggerExit(Collider otherCollider) {
        if (otherCollider.CompareTag("Enemy"))
        {
            Debug.Log ("out");
            target = null;
            StopCoroutine("Fire"); // aborts the currently running Fire() coroutine
        }
    }

    IEnumerator Fire()
    {
        while (target != null)
        {
            nextFire = Time.time + 0.5f;
            while (Time.time < nextFire)
            {
                // smooth the moving of the turret
                targetPos = Quaternion.LookRotation (target.position);
                transform.rotation = Quaternion.Slerp(transform.rotation, targetPos, Time.deltaTime * 5);
                yield return new WaitForEndOfFrame();
            }
            // fire!
            Debug.Log ("shoot");
            bullet = Instantiate(bulletPrefab, transform.position, transform.rotation) as GameObject;
            //bullet.rigidbody.velocity = transform.forward * bulletSpeed;
        }
    }
}
使用UnityEngine;
使用系统集合;
公共类控制器:单行为{
公共刚体;
私有转换目标;
私有游戏对象子弹;
私人浮动nextFire;
专用四元数targetPos;
无效OnTiggerEnter(碰撞器或其他碰撞器){
if(otherCollider.CompareTag(“敌人”))
{
Debug.Log(“登录”);
target=otherCollider.transform;
启动程序(“火灾”);
}
}
void OnTriggerExit(碰撞器其他碰撞器){
if(otherCollider.CompareTag(“敌人”))
{
Debug.Log(“注销”);
target=null;
StopCorroutine(“Fire”);//中止当前正在运行的Fire()Corroutine
}
}
IEnumerator火灾()
{
while(目标!=null)
{
nextFire=Time.Time+0.5f;
while(Time.Time
我试图用这个来改变实例化部分

bullet = (GameObject)Instantiate(bulletPrefab, transform.position, transform.rotation);
            bullet.GetComponent<Bullet>().target = target.transform;
bullet=(游戏对象)实例化(BulletPrefact、transform.position、transform.rotation);
bullet.GetComponent().target=target.transform;
但随后我只得到了类似“InvalidCastException:无法从源类型强制转换到目标类型”的错误。
炮塔控制器+c__迭代器0.MoveNext()(位于Assets/Scripts/tartacontroller.cs:44)“第一个问题:子弹预制。变量类型为
刚体
。如果要将其视为游戏对象,则该变量必须是游戏对象。或者您可以实例化它,转换为
刚体
,然后使用
.gameObject
访问器。像这样:

((RigidBody)Instantiate(theRigidbody)).gameObject
第二个问题:从简单的旋转开始。如果它不起作用,现在还不要幻想。从这样的事情开始(朝向目标的瞬间旋转):


如果它能工作,那么就增加一些额外的复杂性,直到它完全满足您的需要。如果你没有把事情弄清楚,周一给我一个留言。我已经编写了炮塔瞄准代码(包括最大旋转速度),我想我的老板不会介意我上传它。

第一个问题:子弹预制。变量类型为
刚体
。如果要将其视为游戏对象,则该变量必须是游戏对象。或者您可以实例化它,转换为
刚体
,然后使用
.gameObject
访问器。像这样:

((RigidBody)Instantiate(theRigidbody)).gameObject
第二个问题:从简单的旋转开始。如果它不起作用,现在还不要幻想。从这样的事情开始(朝向目标的瞬间旋转):


如果它能工作,那么就增加一些额外的复杂性,直到它完全满足您的需要。如果你没有把事情弄清楚,周一给我一个留言。我已经编写了炮塔瞄准代码(包括最大旋转速度),我想我的老板不会介意我上传它。

第一个问题:子弹预制。变量类型为
刚体
。如果要将其视为游戏对象,则该变量必须是游戏对象。或者您可以实例化它,转换为
刚体
,然后使用
.gameObject
访问器。像这样:

((RigidBody)Instantiate(theRigidbody)).gameObject
第二个问题:从简单的旋转开始。如果它不起作用,现在还不要幻想。从这样的事情开始(朝向目标的瞬间旋转):


如果它能工作,那么就增加一些额外的复杂性,直到它完全满足您的需要。如果你没有把事情弄清楚,周一给我一个留言。我已经编写了炮塔瞄准代码(包括最大旋转速度),我想我的老板不会介意我上传它。

第一个问题:子弹预制。变量类型为
刚体
。如果要将其视为游戏对象,则该变量必须是游戏对象。或者您可以实例化它,转换为
刚体
,然后使用
.gameObject
访问器。像这样:

((RigidBody)Instantiate(theRigidbody)).gameObject
第二个问题:从简单的旋转开始。如果它不起作用,现在还不要幻想。从这样的事情开始(朝向目标的瞬间旋转):


如果它能工作,那么就增加一些额外的复杂性,直到它完全满足您的需要。如果你没有把事情弄清楚,周一给我一个留言。我已经编写了炮塔瞄准代码(包括最大旋转速度),我想我的老板不会介意我上传它。

顺便说一句,以下是我在项目中使用的炮塔旋转代码(经许可共享):

使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
公共级炮塔:单一行为
{
[序列化字段]
专用浮点数旋转率弧度=2*Mathf.PI;
[序列化字段]
private Transform Totaltatop;//旋转的枪部件
[序列化字段]
私有转换点;
敌方私人目标;
无效更新()
{
目标敌人();
}
无效目标敌人()
{
if(target==null | | target.health.health>0);