Unity3d中的箭头游戏对象赢得';t飞
我在unity5中实现了一个弓箭脚本。但是箭不会飞出去。有人能告诉我为什么会这样吗。我是初学者 这是弓的脚本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
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);
}
}