
精灵箭矢与精灵弩矢(追踪箭矢与弩矢)(U6)
观看视频了解箭矢的实际效果 你是否厌倦了用弓箭或弩箭总是射不中目标?别再烦恼了!你这个小作弊者。如果你没有弩箭,请不要下载V2版本。
查看大图public class ElvenArrow : MonoBehaviour { protected Item item; public Creature target; public Transform headTransform; public ItemModuleElvenArrow module;
protected void Awake()
{
item = this.GetComponent<Item>();
module = item.data.GetModule<ItemModuleElvenArrow>();
item.OnGrabEvent += ElvenGrab;
item.OnTeleGrabEvent += ElvenTeleGrab;
item.OnUngrabEvent += ElvenUngrab;
item.OnCollisionEvent += ElvenCollision;
headTransform = item.definition.GetCustomReference("HeadTransform");
}
void ElvenCollision(ref CollisionStruct collisionInstance)
{
if (collisionInstance.targetType != CollisionStruct.TargetType.NPC)
{
item.rb.AddForce(item.transform.forward.normalized * 10f, ForceMode.Impulse);
}
if (collisionInstance.otherInteractiveObject)
{
if(collisionInstance.otherInteractiveObject.handlers.Count > 0)
{
collisionInstance.otherInteractiveObject.disableCollisionDetection = true;
item.rb.AddForce(item.transform.forward.normalized * 10f, ForceMode.Impulse);
}
}
}
void ElvenUngrab(Handle handle, Interactor interactor, bool throwing)
{
item.rb.mass = 0.1f;
}
void ElvenGrab(Handle handle, Interactor interactor)
{
target = null;
item.rb.mass = 0.01f;
}
void ElvenTeleGrab(Handle handle, Telekinesis telekinesis)
{
target = null;
}
void Update()
{
if(!target && item.isFlying && item.rb.velocity.magnitude >= 3f)
{
SetTarget();
}
if (target)
{
if (item.rb.velocity.magnitude < 3f)
{
target = null;
}
else
{
float initVelocity = item.rb.velocity.magnitude;
item.transform.LookAt(target.body.headBone);
item.rb.velocity = Vector3.zero;
item.rb.AddForce(item.transform.forward.normalized * initVelocity, ForceMode.VelocityChange);
}
}
}
void SetTarget()
{
float minAngle = module.maxAngle;
target = null;
if(Creature.list.Count > 0)
{
foreach(Creature npc in Creature.list)
{
if (npc != Creature.player && npc.state != Creature.State.Dead)
{
if (npc.body)
{
if (npc.body.headBone)
{
if (Vector3.Angle(headTransform.position - item.transform.position, npc.body.headBone.position - item.transform.position) < minAngle)
{
target = npc;
minAngle = Vector3.Angle(headTransform.position - item.transform.position, target.body.headBone.position - item.transform.position);
}
}
}
}
}
}
}
}

还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。