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);