【发布时间】:2019-03-09 16:46:05
【问题描述】:
我正在尝试在 Unity 中用 C# 编写一个抓钩。 这个想法是把一个球类游戏对象扔到一个带有“Hookable”标签的游戏对象上,并将玩家带到球被抓住的地方。 球可以投掷并成功识别碰撞,但不会将球员带走。 代码似乎是正确的,控制台没有给出任何警告,但是,我不明白发生了什么不工作。 这是代码,如果这听起来很无聊,请见谅:
抓钩(附在玩家游戏对象上):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GrapplingHook : MonoBehaviour
{
public GameObject hook;
public GameObject hookHolder;
public float hookTravelSpeed;
public float playerTravelSpeed;
public static bool fired;
public bool hooked;
public float maxDistance;
private float currentDistance;
void Update()
{
//firing the hook
if(/*Input.GetMouseButtonDown(0)*/Input.GetKeyDown(KeyCode.H) && fired == false)
fired = true;
if (fired == true && hooked == false)
{
hook.transform.Translate(Vector3.forward * Time.deltaTime * hookTravelSpeed);
currentDistance = Vector3.Distance(transform.position, hook.transform.position);
if(currentDistance >= maxDistance)
ReturnHook();
}
if(hooked == true)
{
transform.position = Vector3.MoveTowards(transform.position,
hook.transform.position, Time.deltaTime * playerTravelSpeed);
float distanceToHook = Vector3.Distance(transform.position, hook.transform.position);
if(distanceToHook < 1)
ReturnHook();
}
}
void ReturnHook()
{
hook.transform.position = hookHolder.transform.position;
fired = false;
hooked = false;
}
}
这是检查是否检测到抓钩的代码(附加到 Hook 和 Hookable 对象):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HookDetector : MonoBehaviour
{
public GameObject player;
void OnTriggerEnter(Collider other)
{
if(other.tag == "Hookable")
{
player.GetComponent<GrapplingHook>().hooked = true;
Debug.Log("Tocou");
}
}
}
【问题讨论】:
标签: c# unity3d game-engine game-development