所以在我的游戏开发中,我正在做一个网球游戏,我试图开发一个球员和网球之间的碰撞框,但它不工作,我添加了刚体组件并勾选了isTrigger框,当我勾选了球员和网球拍上的isTrigger框时,碰撞触发,但只有当我按下键之前,游戏运行。然而,当我取消选中球员和网球拍上的isTrigger框时,无论如何它都不会触发。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Character : MonoBehaviour
{
public Leftmove left;
float speed = 3f;
float force = 10;
bool hit;
public Transform target;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 position = transform.position;
Vector3 positiont = target.position;
if (Input.GetKeyDown(KeyCode.F))
{
hit = true;
}
else if (Input.GetKeyUp(KeyCode.F))
{
hit = false;
}
if ((hit == true) && (Input.GetKey(KeyCode.LeftArrow)))
{
positiont.x += speed * Time.deltaTime;
}
if ((hit == true) && (Input.GetKey(KeyCode.RightArrow)))
{
positiont.x -= speed * Time.deltaTime;
}
if ((hit == true) && (Input.GetKey(KeyCode.UpArrow)))
{
positiont.z -= speed * Time.deltaTime;
}
if ((hit == true) && (Input.GetKey(KeyCode.DownArrow)))
{
positiont.z += speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftArrow) && hit == false)
{
position.x += speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.RightArrow) && hit == false)
{
position.x -= speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.UpArrow) && hit == false)
{
position.z -= speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.DownArrow) && hit == false)
{
position.z += speed * Time.deltaTime;
}
transform.position = position;
target.position = positiont;
}
private void CollisionTrigger(Collider other)
{
if (other.CompareTag("Tennis ball"))
{
Vector3 dir = target.position - transform.position;
other.GetComponent<Rigidbody>().velocity = dir.normalized * force;
}
}
}
1条答案
按热度按时间vatpfxk51#
你似乎缺乏Unity中碰撞如何工作的基本知识。要使碰撞检测工作,你需要以下内容
1.一个非运动刚体
1.碰撞器连接到两个碰撞的游戏对象。
如果碰撞器不是触发器,则调用函数OnCollisionEnter。如果是触发器,则调用OnTriggerEnter。您可以阅读basics of Unity Colliders上的这篇文章以了解更多信息。