Синтаксис:
Используется javascript
using UnityEngine;
using System.Collections;
public class FigureMove : MonoBehaviour {
private GameObject Base;
private MainDataBase MainData;
private Transform myTransform;
// Use this for initialization
void Start () {
Base = GameObject.FindGameObjectWithTag("Base");
MainData = Base.GetComponent("MainDataBase") as MainDataBase;
myTransform = transform;
}
bool figure_collision(Vector3 position){
Vector3 unitPosition;
if (position.x < 0 || position.x > 10.0f-MainData.xf || position.y < 0.0f)
{
return false;
}
else{
for (int i = 0; i < 4; i++)
{
unitPosition = new Vector3(MainData.gpsFigure[0,i],0,MainData.gpsFigure[1,i]);
if (MainData.areaMask[Mathf.RoundToInt(position.x + unitPosition.x), Mathf.RoundToInt(position.y + unitPosition.y)])
{
return false;
}
}
}
return true;
}
// Update is called once per frame
void Update () {
if(MainData.figureOk){
transform.localPosition = Vector3.MoveTowards(transform.localPosition,
new Vector3(transform.localPosition.x,transform.localPosition.y,-1.0f),
Time.deltaTime*2.0f);
if (Input.GetKeyDown("a") && figure_collision(myTransform.localPosition - Vector3.right)){
myTransform.localPosition = new Vector3(Mathf.RoundToInt(myTransform.localPosition.x-1.0f),
myTransform.localPosition.y,
myTransform.localPosition.z);
}
if (Input.GetKeyDown("d") && figure_collision(myTransform.localPosition + Vector3.right)){
myTransform.localPosition = new Vector3(Mathf.RoundToInt(myTransform.localPosition.x+1.0f),
myTransform.localPosition.y,
myTransform.localPosition.z);
}
}
}
}
using System.Collections;
public class FigureMove : MonoBehaviour {
private GameObject Base;
private MainDataBase MainData;
private Transform myTransform;
// Use this for initialization
void Start () {
Base = GameObject.FindGameObjectWithTag("Base");
MainData = Base.GetComponent("MainDataBase") as MainDataBase;
myTransform = transform;
}
bool figure_collision(Vector3 position){
Vector3 unitPosition;
if (position.x < 0 || position.x > 10.0f-MainData.xf || position.y < 0.0f)
{
return false;
}
else{
for (int i = 0; i < 4; i++)
{
unitPosition = new Vector3(MainData.gpsFigure[0,i],0,MainData.gpsFigure[1,i]);
if (MainData.areaMask[Mathf.RoundToInt(position.x + unitPosition.x), Mathf.RoundToInt(position.y + unitPosition.y)])
{
return false;
}
}
}
return true;
}
// Update is called once per frame
void Update () {
if(MainData.figureOk){
transform.localPosition = Vector3.MoveTowards(transform.localPosition,
new Vector3(transform.localPosition.x,transform.localPosition.y,-1.0f),
Time.deltaTime*2.0f);
if (Input.GetKeyDown("a") && figure_collision(myTransform.localPosition - Vector3.right)){
myTransform.localPosition = new Vector3(Mathf.RoundToInt(myTransform.localPosition.x-1.0f),
myTransform.localPosition.y,
myTransform.localPosition.z);
}
if (Input.GetKeyDown("d") && figure_collision(myTransform.localPosition + Vector3.right)){
myTransform.localPosition = new Vector3(Mathf.RoundToInt(myTransform.localPosition.x+1.0f),
myTransform.localPosition.y,
myTransform.localPosition.z);
}
}
}
}
Начальное положение объекта = 4, при перемещении влево происходит вычитание 1 из X. При вычитании 1 из 2 почему-то получается не 1 а 0,9999999.... хотя стоит округление. До 2ки вычитание дает верный результат (3, 2...) С движением вправо такой ерунды не замечено.