我是靠谱客的博主 虚拟金鱼,最近开发中收集的这篇文章主要介绍VR乒乓球项目Unity3D 开发经验整理,4简单而有效的AI,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前面的AI费了好大劲也没达到理想效果,本来应该继续写更复杂而NB的AI算法,例如机器学习,后面也肯定要这么做。

不过我突然想到了一个简单有效的方法,先卖个关子,最后给代码。先谈优缺点

优点:

简单,

好理解,

稳定有效,

缺点:

粗暴干预,

并非完全仿真,

回球不符合直觉,无法预判

方法:

在球的OnCollisionExit方法上做操作,碰撞结束后让球自己朝落点飞过去。

类似于对方开挂让球百发百中,己方也可以这样改。

private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.name.Equals("Racket (1)"))
        {
            AI2(this.transform.position, aim.transform.position, aim2.transform.position);
        }
        if (collision.gameObject.name.Equals("Racket"))
        {
            AI2(this.transform.position, aim.transform.position, aim2.transform.position);
        }
    }
    public void AI2(Vector3 collisionPoint, Vector3 aim, Vector3 aim2)
    {
        if(collisionPoint.z<0)
        {
            aim = aim2;
        }
            float x2 = collisionPoint.x;
            float y2 = collisionPoint.y;
            float z2 = collisionPoint.z;
            float x1 = aim.x;
            float y1 = aim.y;
            float z1 = aim.z;
            //float c = UnityEngine.Random.Range(2.0f,5.0f);
            float c = height;
            Vector3 v22 = calcLine(x1, y1, z1, x2, y2, z2, c);
            this.GetComponent<Rigidbody>().velocity = v22;
      
    }

双方都这么写的,基本达到了神仙打架的效果,然而还是有击球失误的时候。

如果对深入的科学没什么兴趣,到现在的代码就可以做一个3D VR 乒乓球 游戏 了。

后面加上计分系统和参数配置部分,例如玩法设置,难度设置,落点范围设置,过网高度设置,球桌弹性设置,球拍弹性设置,球拍重量设置。

当然,我下一篇还是讨论怎么用机器学习写一个AI

最后

以上就是虚拟金鱼为你收集整理的VR乒乓球项目Unity3D 开发经验整理,4简单而有效的AI的全部内容,希望文章能够帮你解决VR乒乓球项目Unity3D 开发经验整理,4简单而有效的AI所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部