Unity入门 ---- unity2D基础知识

DAY 一:

向量Vector

  1. 向量的长度
    Vector2 :长度 = sqrt( x2 + y2 )
    Vector3 :长度 = sqrt( x2 + y2 + z2 )
    可直接使用API求长度:
  float len = v.magnitude;
  1. 向量的标准化Normalize
    将向量的长度缩放成1,即单位向量
    示例: (2,2) --> (0.707,0.707) 、(3,4) --> (0.6,0.8)
    使用API进行标准化,示例:
 Vector3 a = new Vector3(3f,4f,0);
 Vector3 b = a.normalized;
 Debug.log("标准化为: " + b.ToString("F3"));
 //F3表示在打印显示时保留3位小数;
 //注:向量打印默认显示保留一位小数
  1. 几个常用的标准向量(静态向量)
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
该物体在世界空间中的坐标
屏幕坐标
通过屏幕(摄像头)观察,该物体在屏幕上的位置
屏幕坐标系:

  • y轴向上,x轴向右 ,左下角为(0,0);
  • 宽度Screen.width(像素);高度Screen.height(像素)

获取一个物体的屏幕坐标:

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,0,-90);

    }
    // Update is called once per frame
    void Update()
    {
   
        //得到物体的屏幕坐标
        Vector3 sp = Camera.main.WorldToScreenPoint(transform.position);

        //到达右边界后向左旋转
        if( toRight && sp.x > Screen.width) {
   
            toRight = 
  • 15
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值