您的位置:首页 > 移动开发 > Unity3D

Unity学习之RollAballGame改动版本

2016-12-09 09:09 246 查看
根据Unity官方给的Tutorials的Roll-a-Ball tutorial实例进行了一定的改动,用来学习Unity,这个游戏就是小球撞击其他正方体让正方体消失,原始案例使用的是方向键,我将它改为屏幕点击使小球移动,这样一来,传到手机上一样可以玩,点击屏幕的代码,是我从网上找到的,因为我完全没有思路解决点击屏幕事件,就看了一下别人怎么实现的。于是,我查到了一个方法就是用Ray来实现,首先,屏幕是个二维界面,而这个游戏是个3D游戏,那么二维坐标和三维坐标肯定不一样,就需要通过射线来实现转换,以摄像机为源点,设定射线长为100,射线终点为鼠标左键点击的位置,当完成鼠标点击后,获取终点位置,这样就得到了点击时的世界坐标,接下来就是位移了,官方给的代码示例是根据小球的Rigidbody的addforce使小球发生移动,而查询到的代码使用的是Translate是小球位移。

那么我就展示一下我更改的代码,PlayerController.cs

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PlayerController : MonoBehaviour {
private Rigidbody rb;
public float speed;
public Text winText;
private int count;
public float speed1= 3f;
private Vector3 offsetVec;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
count = 0;
winText.text = "";
}

// Update is called once per frame
void FixedUpdate()
{
RaycastHit hitInfo;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(ray, out hitInfo, 100))
{
//当射线碰撞到plane并且鼠标左键按下时
if (hitInfo.transform.tag == "Ground" && Input.GetMouseButtonDown(0))
{
//让cube方向朝向点击位置
transform.LookAt(hitInfo.point);
offsetVec = hitInfo.point - transform.position;
}
}
//向量的magnitude表示这个向量的长度,当cube离我们点击位置小于1的时候才停止移动,这个数值可以自己调节
if (offsetVec.magnitude > 1f)
{
transform.Translate(Vector3.forward * speed1 * Time.deltaTime);
//更新offsetVec的值
offsetVec = hitInfo.point - transform.position;
}

}

void OnTriggerEnter(Collider other) {
if(other.gameObject.CompareTag("Pick Up"))
{
count++;
other.gameObject.SetActive(false);
if (count>8)
{
winText.text = "You want to win? \n Impossible.(-.-)";
}
}

}
}至于3D场景,我使用的时候出现了一点问题,10个正方体当中有一个无法碰撞消失,于是我将错就错,改为吃到9个就结束游戏。其他代码和官网给的一致,我就不贴出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# unity3d unity 鼠标