📅  最后修改于: 2023-12-03 14:48:13.139000             🧑  作者: Mango
本文介绍了一个示例程序,在其中使用了 unityEngine.Transform.get_position() 方法。这个方法是用来获取 GameObject 的位置信息的。示例程序是一个简单的近战武器,当开启攻击时,它会使用该方法获取自己的位置信息。
下面是使用了 unityEngine.Transform.get_position() 方法的示例代码:
using UnityEngine;
public class MeleeWeapon : MonoBehaviour
{
public float attackRange;
public int attackAmount;
public float attackDelay;
public LayerMask attackLayer;
public GameObject attackEffect;
private Collider[] hits;
private Transform weaponTransform;
private void Start()
{
weaponTransform = transform;
hits = new Collider[10];
}
public void BeginAttack(bool throwingAttack)
{
Vector3 attackPosition = weaponTransform.get_position(); // 使用 get_position() 方法获取自身位置
if (throwingAttack)
{
attackPosition += weaponTransform.forward * 2f;
}
StartCoroutine(PerformAttack(attackPosition));
}
private IEnumerator PerformAttack(Vector3 position)
{
yield return new WaitForSeconds(attackDelay);
int hitCount = Physics.OverlapSphereNonAlloc(position, attackRange, hits, attackLayer);
for (int i = 0; i < hitCount; i++)
{
Debug.Log("Attacking " + hits[i].name);
// 给每个受击的物体造成不同的伤害量
hits[i].GetComponent<Health>().TakeDamage(attackAmount * i);
if (attackEffect != null)
{
Instantiate(attackEffect, hits[i].transform.position, Quaternion.identity);
}
}
}
}
这里使用了 Vector3 类型的变量来保存武器所在位置,该变量通过 weaponTransform.get_position()
方法获取。然后使用该变量来执行武器的攻击。
weaponTransform
变量是使用 Transform
类型的 transform
属性来初始化的。这个属性是 GameObject
类型中的一个成员,表示该物体在场景中的转换信息。
public void BeginAttack(bool throwingAttack)
是一个函数,该函数在开始进行攻击时被调用。public
表示该函数是公开的,可以从其他类中调用。bool throwingAttack
是一个布尔类型的输入参数,它表示武器在攻击时是否会进行投掷攻击。
在该函数中,使用了 weaponTransform.get_position()
方法来获取近战武器自身的位置信息。如果 throwingAttack
为真,则将位置向前方移动 2 个单位长度。然后调用了 PerformAttack
函数,来完成攻击操作。
PerformAttack
主要完成追踪攻击,即通过射线检测来判断攻击是否命中。输入参数 position
表示武器的位置信息。该函数会在攻击的攻击延迟期结束后调用。
Physics.OverlapSphereNonAlloc(position, attackRange, hits, attackLayer)
用于判断在给定位置、给定半径内是否有物件被检测到。如果有,将会返回被检测到的对象个数,并将这些对象的 Collider
组件放入数组 hits
中。
接下来的 for
循环,通过遍历所有击中的 Collider
组件,并对其进行一系列伤害操作。这里也可以在伤害计算时增加一个随机攻击力的变化。最后,通过实例化 attackEffect
特效来增加打击感。
unityEngine.Transform.get_position()
方法是用来获取物体位置信息的。在使用该方法时,需要先创建一个 Transform
对象。本文提供了一个示例程序,该程序使用了该方法,并演示了如何使用该方法来完成武器的近战攻击。