unity3d Unity游戏中的3D框碰撞不起作用,尽管

pcww981p  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(356)

所以在我的游戏开发中,我正在做一个网球游戏,我试图开发一个球员和网球之间的碰撞框,但它不工作,我添加了刚体组件并勾选了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;
        }

    }

}
vatpfxk5

vatpfxk51#

你似乎缺乏Unity中碰撞如何工作的基本知识。要使碰撞检测工作,你需要以下内容
1.一个非运动刚体
1.碰撞器连接到两个碰撞的游戏对象。
如果碰撞器不是触发器,则调用函数OnCollisionEnter。如果是触发器,则调用OnTriggerEnter。您可以阅读basics of Unity Colliders上的这篇文章以了解更多信息。

相关问题