赞
踩
float len = v.magnitude;
Vector3 a = new Vector3(3f,4f,0);
Vector3 b = a.normalized;
Debug.log("标准化为: " + b.ToString("F3"));
//F3表示在打印显示时保留3位小数;
//注:向量打印默认显示保留一位小数
Vector3.right; //Vector3(1,0,0)
Vector3.up; //Vector3(0,1,0)
Vector3.forward;//Vector3(0,0,1)
从a到b的夹角:示例
Vector3 a = new Vector3(2,2,0);
Vector3 b = new Vector3(-1,3,0);
float angle1 = Vector3.SignedAngle(a,b,Vector3.forward);//顺着z轴进行旋转,带符号的,负为逆时针,正为顺时针
float angle2 = Vector3.Angle(a,b);
Debug.Log("a到b的夹角为:" + angle1);
示例:让一个飞机指向子弹,然后飞机向子弹移动
void Start() { //本物体的现指向:Y轴 Vector3 face = this.transform.up; //找到所要指向的物体 GameObject target = GameObject.Find("子弹"); //找到两个物体之间的方向:两物体的空间坐标相减 Vector3 direction = target.transform.position - this.transform.position; //一个是Y轴标准向量,一个两物体之间的向量,得到旋转角度 float angle = Vector3.SignedAngle(face,direction,Vector3.forward); //旋转 this.transform.Rotate(0,0,angle); } void Update() { float step = 1.2f * Time.deltaTime; //机头指向沿自己的Y轴指向前进 transform.Translate(0,step,0,Space.Self); }
游戏中的物体,有两个坐标:
空间坐标: transform.position
该物体在世界空间中的坐标
屏幕坐标
通过屏幕(摄像头)观察,该物体在屏幕上的位置
屏幕坐标系:
获取一个物体的屏幕坐标:
Vector3 pos = transform.position;
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);//单位为像素
注:因为屏幕边界(左右)的不确定,所以去判断小物体是否移动至屏幕边界,得用屏幕坐标。
示例:让一架飞机左右飞行,不能超出屏幕边界
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class point : MonoBehaviour
{
private bool toRight = true; //用于判断是否到达屏幕边界
// Start is called before the first frame update
void Start()
{
//让机头顺时针旋转90向右
transform.eulerAngles = new Vector3(0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。