概述
前面的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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复