我试着通过基本的FPS射击来练习,我想在你射击的地方有弹孔。然而,当我试图这样做的时候,纹理Z战斗发生了。
枪使用光线投射的工作方式如下:Physics.Raycast(playercam.transform.position, playercam.transform.forward, out hit)
弹孔目前是一个2D精灵,我使用以下脚本将其放置在目标上:GameObject ceffect = Instantiate(bullethole, hit.point, Quaternion.LookRotation(hit.normal));
理论上这应该工作,它确实,然而,当它被放置在世界上,它Z-战斗与地板纹理。
我尝试过在不同的层上渲染弹孔,但这根本不起作用。
有没有办法把sprite拉到对象的顶部?我是不是在图层上遗漏了什么?如果你需要更多的代码,这是我目前的拍摄脚本,但是看看你自己的风险。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public float fireRate = 2f;
public float weapon = 1f;
public float pistoldmg = 5f;
public Camera playercam;
public GameObject redblood;
public GameObject bullethole;
private float timetofire = 0f;
void Start()
{
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Mouse0) && (Time.time > timetofire))
{
timetofire = Time.time + 1f / fireRate;
PistolShoot();
}
else if(Input.GetKey(KeyCode.Mouse0))
{
}
}
void PistolShoot()
{
RaycastHit hit;
if(Physics.Raycast(playercam.transform.position, playercam.transform.forward, out hit))
{
Enemy1 enemy = hit.transform.GetComponent<Enemy1>();
if(enemy != null)
{
enemy.Shot(pistoldmg);
GameObject beffect = Instantiate(redblood, hit.point, Quaternion.LookRotation(hit.normal));
GameObject ceffect = Instantiate(bullethole, hit.point, Quaternion.LookRotation(hit.normal));
}
else
{
GameObject beffect = Instantiate(redblood, hit.point, Quaternion.LookRotation(hit.normal));
GameObject ceffect = Instantiate(bullethole, hit.point, Quaternion.LookRotation(hit.normal));
}
}
}
}
`
1条答案
按热度按时间eh57zj3b1#
从光线投射命中信息中,我们可以得到法向矢量,你可以用它来旋转对象。我们也可以用同样的法向矢量来“轻推”对象远离命中点。一段代码的例子看起来像这样:
这会将
redblood
对象推离命中点大约“1厘米”,将bullethole
对象推离命中点大约“2厘米”。这可能需要调整以适合您的测量,但如果您遵循了一对一的Unity单位到米的指南,那么这可能会起到作用。请注意,某些移动的电话在计算位置时使用较低的精度,因此您可能需要增加此值以使其更明显。
下面是一个在1x 1x 1立方体上使用稍微夸张的微移量的示例- 0.05和0.1而不是0.01和0.02。x1c 0d1x