Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Unity3d中的箭头游戏对象赢得';t飞_Unity3d_Unity5 - Fatal编程技术网

Unity3d中的箭头游戏对象赢得';t飞

Unity3d中的箭头游戏对象赢得';t飞,unity3d,unity5,Unity3d,Unity5,我在unity5中实现了一个弓箭脚本。但是箭不会飞出去。有人能告诉我为什么会这样吗。我是初学者 这是弓的脚本 using UnityEngine; using System.Collections; public class Bow : MonoBehaviour { private GameObject arrow = null; private Vector3 fwd = Vector3.zero; public GameObject arrowPrefa

我在unity5中实现了一个弓箭脚本。但是箭不会飞出去。有人能告诉我为什么会这样吗。我是初学者

这是弓的脚本

using UnityEngine;
using System.Collections;

public class Bow : MonoBehaviour {

    private GameObject arrow = null;
    private Vector3 fwd = Vector3.zero;




    public GameObject arrowPrefab = null;
    public int initialSpeed = 30;
    public GameObject launchPosition = null;
    public float waitTime = 0.1f;
    public LayerMask layerMask;


    // Use this for initialization
    void Start ()
    {

    }

    void FixedUpdate()
    {
        fwd = transform.TransformDirection(Vector3.forward);
        if (!Physics.Raycast(transform.position, fwd, 1, layerMask))
        {
            if (Input.GetMouseButtonDown(0))
            {
                Fire();
            }
        }
    }



    private void Fire()
    {
        //yield return new WaitForSeconds(waitTime);
        new WaitForSeconds(waitTime);
        arrow = (GameObject)Instantiate(arrowPrefab, launchPosition.transform.position, launchPosition.transform.rotation);
    }


}
这是箭头脚本

using UnityEngine;
using System.Collections;
公共类箭头:单一行为{

    private Vector3 velocity = Vector3.zero;
    private Vector3 newPos;
    private Vector3 oldPos;
    private bool hasHit = false;
    private Vector3 direction;
    private RaycastHit hit;
    private GameObject follow;

    private Vector3 dir;
    private float dist;
public LayerMask LayerMask;
公众浮标速度;
公共交通系统;
公共浮动强制适用;
公众浮力;
void Start()
{
newPos=变换位置;
oldPos=newPos;
速度=速度*transform.forward;
}
无效更新()
{
if(hasHit)
{
transform.position=follow.transform.position;
transform.rotation=follow.transform.rotation;
返回;
}
newPos+=(速度+方向)*Time.deltaTime;
dir=新POS-旧POS;
距离=方向震级;
dir/=dist;
如果(距离>0)
{
if(物理光线投射(oldPos,dir,out-hit,dist,layerMask))
{
newPos=命中点;
if(命中对撞机)
{
如果(击中刚体)
{
GameObject生命点=(GameObject)实例化(新GameObject(),hit.point,transform.root.rotation);
hitpoint.transform.parent=hit.transform;
跟随=生命点;
GetComponent().isTrigger=true;
hit.rigidbody.AddForceAtPosition(forceToApply*dir,hit.point);
hasHit=true;
}
其他的
{
启用=错误;
}
}
}
}
oldPos=变换位置;
transform.position=newPos;
速度.y-=箭头重力*时间增量;
arrow rotation.transform.rotation=Quaternion.LookRotation(dir);
}
}

您可以在箭头脚本中声明,但不定义“方向”。我怀疑将其包括在newPos计算中意味着没有添加任何内容。

太好了,您的一个细微之处奏效了。我错误地将
“update”
方法放错了地方。应该是
“Update”
。谢谢你的帮助:)我建议你先自己解决这个问题,再加上你尝试过的/失败的,等等,以获得更积极的回应。它还将帮助你学会自己解决这些问题的诀窍!我希望这有帮助!:D@andeart现在可以了。更新方法中存在问题。它应该从资本开始。我真傻。我希望剧本能帮助别人。它100%有效。感谢您的反馈:)
    public LayerMask layerMask;
    public float speed;
    public Transform arrowRotation;
    public float forceToApply;
    public float arrowGravity;


    void Start()
    {
        newPos = transform.position;
        oldPos = newPos;
        velocity = speed * transform.forward;
    }

    void update()
    {
        if (hasHit)
        {
            transform.position = follow.transform.position;
            transform.rotation = follow.transform.rotation;
            return;
        }

        newPos += (velocity + direction) * Time.deltaTime;
        dir = newPos - oldPos;
        dist = dir.magnitude;

        dir /= dist;

        if(dist > 0)
        {
            if (Physics.Raycast(oldPos,dir,out hit,dist,layerMask))
            {
                newPos = hit.point;

                if (hit.collider)
                {
                    if (hit.rigidbody)
                    {
                        GameObject hitpoint = (GameObject)Instantiate(new GameObject(), hit.point, transform.root.rotation);
                        hitpoint.transform.parent = hit.transform;
                        follow = hitpoint;
                        GetComponent<Collider>().isTrigger = true;
                        hit.rigidbody.AddForceAtPosition(forceToApply * dir, hit.point);
                        hasHit = true;
                    }
                    else
                    {
                        enabled = false;
                    }
                }
            }
        }

        oldPos = transform.position;
        transform.position = newPos;
        velocity.y -= arrowGravity * Time.deltaTime;
        arrowRotation.transform.rotation = Quaternion.LookRotation(dir);

    }



}