克隆Wheekling——糊个样子

Unity的2d不是很熟悉。其实,unity也是不很熟悉。先用3d实现一下核心的机制吧。

设定摄像机俯视,在x-z平面内设定游戏的平面。

用基础的几何形,构成游戏元素。

克隆Wheekling——糊个样子

如上图,有了齿轮,小球,豆子,边框挡板及白色底景。

小球设置:

1-PhysicMaterial:

Collider中,添加一个PhysicMaterial,为了使得小球无能量损失,Friction全部设置为0,而Bounciness设为1,其余的Friction、Bounciness混合用来体现不同材质碰撞的一些混合效果,这里用处不大。各向异性,也没有使用必要。

克隆Wheekling——糊个样子

2-RigidBody:

有了这个刚体component后,可以应用其velocity属性,比较方便。

Mass为质量,如果对其施加一个作用力,有F=ma的效果,这里暂时不用,保留初始值1;

Drag为直线空气阻力,始终与运动方向相反,显性的变现为:直线运动慢慢停止,这里设为0;

Angular Drag为旋转空气阻力,与角速度相反,显性的表现为:旋转运动慢慢停止,这里设为0;

质量、作用力、直线及角动空气阻力合理组合,可以模拟出香蕉球效果(马格努斯力),后话后话,有待将来做一个《儒尼尼奥教你任意球》。

Constrains可以限定运动平面,及角动轴,Position设定Y值衡定,Rotation设定仅能绕Y轴转动。

克隆Wheekling——糊个样子

3-脚本:

设定一个初速度而已

克隆Wheekling——糊个样子
 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class HeroBeing : MonoBehaviour {
 5     public Vector3 heroV = new Vector3(4f,0,6f);
 6     void Start () {
 7         rigidbody.velocity = heroV;
 8     }
 9     void Update () {
10     
11     }
12 }
克隆Wheekling——糊个样子

挡板设置:

PhysicMaterial,赋予如小球的材质。这样一来,小球与之碰撞,将获得完美的反弹。入射角==反射角,入射速度==反射速度。需要注意的事项,物理引擎中有一些默认的参数设定,在edit-projectsetting中

1-Sleep Velocity,低于这个值,不再施加力的作用,运动将停止

2-Sleep Angular Velocity,角动方向,如上

3-Bounce Threshold,反弹的阀值,低于这个值将不作反弹,(后面会入这个坑)

克隆Wheekling——糊个样子

豆子设置:

1-Trigger:

在Collider中,Is Trigger打勾,意味着碰撞体将作为tigger检测

2-脚本:

void OnTriggerEnter(){
        GameObject.Destroy(gameObject);
}

检测到碰撞后,自身销毁

齿轮设置:

1-Tigger

在Collider中,Is Trigger打勾

2-脚本:

自身转动,用transform中Rotate的方法,定Y轴为旋转轴,角速度为函数参数

public void Whirling(float _angleV){
        transform.Rotate(Vector3.up,_angleV);
}

检测到小球的碰撞,使得小球速度为0,带着小球一起做圆周运动。因此,将小球的父级动态设置为齿轮,较为方便

void OnTriggerEnter(Collider hero){
        hero.rigidbody.velocity = Vector3.zero;//still the hero
        hero.transform.parent = transform;//set the hero as a child
        isWhirling = true;
}

将小球推出,赋予小球速度,这个速度的方向与齿轮径向一致。找到子物体小球,将它推出

克隆Wheekling——糊个样子
public void PushHero(float _fSpeed){//fSpeed : multi
        isWhirling = false;
        GameObject hero = transform.Find("hero").gameObject;
        if(hero){
            hero.transform.parent = transform.parent;
            Vector3 dir = hero.transform.position -transform.position;
            dir = dir.normalized;
            hero.rigidbody.velocity = dir*_fSpeed;
        }
}
克隆Wheekling——糊个样子

Update:设定用鼠标左键触发推出小球

克隆Wheekling——糊个样子
void Update () {
        if(isWhirling){
            Whirling(angleV);
            if(Input.GetMouseButton(0)){
                PushHero(fSpeed);
            }
        }
}
克隆Wheekling——糊个样子

在Unity中,设定这些非常方便并且直观,完全可以是想到了,就做到了。运行一下,小球能直线运动,与挡板做反弹,遇到齿轮,停住。齿轮带着小球做圆周运动,按鼠标左键,小球被弹出,遇到豆子,吃掉豆子。

很顺利。

克隆Wheekling——糊个样子

上一篇:通用用户权限管理系统组件4.1 版本 - 用户表的设计思想分享[教师、职工、学生]


下一篇:Root moto xt907