Unity教程之-愤怒小鸟的星球引力效果

 

上篇文章《Unity教程之-愤怒的小鸟飞行弹道》,本篇unity3d教程,我们来学习下愤怒的小鸟星球引力效果的实现!

在Unity中的物理学:

有一个真实的物理行为,你的游戏对象一定受到碰撞、 重力和各种其他力的影响。为模拟此物理功能是由Unity的物理引擎提供的主要功能之一(虽然很多大的项目都不是用它)。

重力:

重力,汇集所有物质的力量。物质包括任何有形的事物。重力是成线性比例关系。因此,有很多问题,引力对围绕的飞行的东西产生向心力。 质量就是我们如何衡量物质的东西的数量。更大规模的事情是质量越大,它所产生的引力越多。当我们走在地球表面上。但由于地球是大大超过我们,而地球的引力能使我们落在地面,除了取决于所用的质量,重力也取决于你的东西有多远。这就是为什么我们在地球表面而没有在太阳表面, 在你的游戏中实现对地球引力的影响。

示范项目:

打开Unity,转到File > New Project 。 给项目起名并选择2D 。 创建一个场景Scene与主照相机Main Camera,行星的Sprite ,鸟的Sprite 和画布里面包含文本,如下所示: scene

图片可以从网上下载,并设置如下:

sprite 2D and ui

Planet and inspector

转到GameObject > UI > Text,你可以填写你的内容。在这里,我使用游戏视图中的文本内容为”Press Space”。 现在,旋转在行星附近的鸟,编写一个 C# 脚本如下图所示,将它应用于你的鸟。

Bird.cs:


using UnityEngine;
using System.Collections;

public class Bird : MonoBehaviour
{
public Transform planet;
private float forceAmountForRotation = 10;
private Vector3 directionOfPlanetFromBird;
private bool allowForce;

void Start()
{
directionOfPlanetFromBird = Vector3.zero;
}

void Update ()
{

allowForce = false;

if (Input.GetKey(KeyCode.Space))
allowForce = true;

directionOfPlanetFromBird = transform.position - planet.position;
transform.right = Vector3.Cross(directionOfPlanetFromBird, Vector3.forward);
}

void FixedUpdate ()
{
if (allowForce)
rigidbody2D.AddForce (transform.right * forceAmountForRotation);
}
}

向行星的中心添加可以拉这只鸟的引力,编写一个 C# 脚本如下所示并将其应用到你们的星球。


using UnityEngine;
using System.Collections;
public class Planet : MonoBehaviour
{
public Transform bird;
private float gravitationalForce = 5;
private Vector3 directionOfBirdFromPlanet;

void Start ()
{
directionOfBirdFromPlanet = Vector3.zero;
}

void FixedUpdate ()
{
directionOfBirdFromPlanet = (transform.position-bird.position).normalized;
bird.rigidbody2D.AddForce (directionOfBirdFromPlanet*gravitationalForce);
}
}

这样Play场景,然后运行就会看到效果了啊!好了,本篇unity3d教程到此结束,下篇再会!